С помощью 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.
На основе комментария @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"