Команда комплексного поиска с несколькими обрезками

С помощью zsh (при условии, что вы уже находитесь в X ):

typeset -U subdirs
subdirs=(*/**/rf*.img(.e_'REPLY=${REPLY%%/*}'_))
print -rl -- "${subdirs[@]}"

Здесь */* */rf * .img globs для всех файлов rf * .img во всех подкаталогах, квалификаторы globe . и e выбирают только обычные файлы и соответственно сохраняют только первый компонент пути в массиве, который изначально был определен как массив с уникальными элементами (поэтому дубликаты отсутствуют). Затем он печатает каждый элемент массива.

-121--121287-

Как они реализуют этот процесс восстановления?

Они этого не делают. Это не их реализовывать.

Это так называемый альтернативный экранный буфер , который включается и выключается. Он реализован в самом терминале (или программе эмулятора терминала). Терминал реагирует на управляющие последовательности, которые излучаются такими программами TUI. Программы TUI управляют , когда это происходит, но реализация того, что происходит, полностью внутри терминала. Действительно, программы TUI даже не имеют такой же модели происходящего. Для них они переключаются в «адресацию курсора режима» и выключаются из нее.

Не все терминалы и программы эмулятора терминала имеют даже альтернативный экранный буфер. Например, программы эмулятора терминалов, встроенные в ядра Linux и BSD, которые предоставляют свои виртуальные терминалы ядра, обычно не имеют такой возможности.

На таких терминалах отсутствует последовательность управления. Следовательно, запись базы данных termcap/terminfo для типа терминала не будет иметь такой последовательности управления; и переключение с «адресация курсора режима» перезаписывает текущее содержимое экрана без сохранения и восстановления.

vim, nano и все такое не знают об этом . Они не делают ничего другого. Они не то, что выполняет функцию. Они просто излучают управляющие последовательности, которые termcap/terminfo говорят им, что войдут и выйдут «режимы адресации курсора». Для некоторых терминалов, имеющих механизм, «режим адресации курсора» также означает использование альтернативного экранного буфера . Для некоторых, которые не имеют, он не.

Дальнейшее чтение

-121--73382-

введите это в терминал sudo apt-get install libapache2-mod-perl2 ,

затем: sudo a2enmod cgi и перезапустите apache.

1
12.08.2018, 22:24
1 ответ

На основе комментария @StephaneChazelas, использующего раскрытие фигурных скобок, вот решение, которое я использовал для bash, которое работает с пробелами в именах файлов и обрабатывает крайние случаи, как только один пользователь.

Строка для расширения фигурной скобки будет сохранена в переменной, поэтому нам нужно использовать eval, чтобы фактически раскрыть ее.

# escape spaces with backslash
directories=Documents,Pictures,My\ Documents

# get usernames to use with expansion
# and escape any spaces using sed
user_folders=$(find. -maxdepth 1 -mindepth 1 -not -iname Public -a -not -iname Default -type d -printf "%f," | \
sed 's| |\\ |g' )   

# remove trailing comma from last user's name
user_folders=${user_folders::-1}    

# only use brace expansion if there is more than one user; if there's only
# one value it won't expand and we'll be left with braces
[[ $user_folders = *,* ]] && user_folders="{$user_folders}"

find_string="find $user_folders/{$directories}"
eval "$find_string"
0
27.01.2020, 23:15

Теги

Похожие вопросы