Для каждого подкаталога распечатайте имя подкаталога, если существует самое большее 42 .flac
файлы в подкаталоге. Выполнить команду на каталогах, замене -print
-exec … \;
. Совместимый POSIX.
find . -type d -exec sh -c 'set -- "$0"/*.flac; [ $# -le 42 ]' {} \; -print
Обратите внимание, что эта команда не будет работать для поиска каталогов, содержащих нуль .flac
файлы ("$0/*.flac"
расширяется по крайней мере до одного слова). Вместо этого используйте
find . -type d -exec sh -c 'set -- "$0"/*.flac; ! [ -e "$1" ]' {} \; -print
Тот же алгоритм в zsh. **/*
расширяется до всех файлов в текущем каталоге и его подкаталогах рекурсивно. **/*(/)
ограничивает расширение на каталоги. {.,**/*}(/)
добавляет текущий каталог. Наконец, (e:…:)
ограничивает расширение на соответствия, для которых код оболочки возвращается 0.
echo {.,**/*}(/e:'set -- $REPLY/*.flac(N); ((# <= 42))':)
Это может быть сломано на два шага для четкости.
few_flacs () { set -- $REPLY/*.flac(N); ((# <= 42)); }
echo {.,**/*}(/+few_flacs)
Журнал изменений:
• обработайте x=0 правильно.
Замена $MAX
с Вашим собственным пределом:
find -name '*.flac' -printf '%h\n' | sort | uniq -c | while read -r n d ; do [ $n -lt $MAX ] && printf '%s\n' "$d" ; done
Примечание: Это распечатает все подкаталоги со многими .flac
файлы между 0
и $MAX
(оба исключенные).