Вычесть дату в пользовательском формате

С zsh,ты можешь сделать

set -o extendedglob # for ^ and (#i)

printf '%s\n' **/*(D/F^e'[()(($#)) $REPLY/^(#i)(*.tmp|desktop.ini|Thumbs.db|.picasa.ini)(ND)]')

Список каталогов, содержащих только записи, соответствующие (*.tmp|desktop.ini|Thumbs.db|.picasa.ini)без учета регистра.

  • **/:рекурсивный глобус (любой уровень подкаталогов)
  • *(qualifier):glob (здесь *соответствие любому файлу )с квалификаторами (для соответствия другим критериям, кроме имени ).
  • D:включить dotglobдля этого шара (включить скрытые файлы и просмотреть скрытые каталоги ).
  • /:выбирать только файлы типа директория
  • F:только те Fпустые (, которые содержат хотя бы одну запись ). Удалите, если вы также хотите перечислить пустые каталоги.
  • ^:отрицание следующих квалификаторов
  • e'[code]':квалификатор оценки e:выбирает файлы, для которых код не (с предыдущим^)возвращает true.
  • () {code} args:анонимная функция. Здесь код (($#))представляет собой арифметическое выражение в стиле ksh -, которое здесь оценивается как true, если $#не равно -нулю ($#, являющемуся количеством аргументов анонимной функции ).
  • $REPLY/^(#i)(*.tmp|desktop.ini|Thumbs.db|.picasa.ini)(ND)составляет аргументы этой встроенной функции. Вот еще один шар:
  • $REPLY:внутри e'[code]'— это путь к рассматриваемому в данный момент файлу.
  • ^:отрицание.
  • (#i):включить нечувствительное к регистру сопоставление для остальной части шаблона.
  • (*.tmp|desktop.ini|Thumbs.db|.picasa.ini):любой из тех, поэтому с отрицанием ни один из них.
  • (ND):еще один квалификатор глобуса. Nдляnullglob(глобус расширяется до нуля, если совпадений нет, поэтому (($#))снова становится ложным ), Dдля dotglob. Здесь, в качестве оптимизации, мы могли бы также добавитьoNNили oк списку соответствующих файлов )и [1], чтобы выбрать только первый, поскольку нам не нужно знать, сколько их есть, только есть ли они вообще.

Чтобы сделать текст более разборчивым,мы могли бы использовать функцию:

set -o extendedglob

has_useful_entries()
  ()(($#)) ${1-$REPLY}/^(#i)(*.tmp|desktop.ini|Thumbs.db|.picasa.ini)(NDoN[1])

printf '%s\n' **/*(D/F^+has_useful_entries)
1
13.10.2021, 13:35
0 ответов

Теги

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