X個未満の.flac
ファイルを含むディレクトリ内のすべてのフォルダを検索するにはどうすればよいですか?
サブディレクトリに最大42個の_.flac
_ファイルがある場合は、すべてのサブディレクトリについて、サブディレクトリ名を出力します。ディレクトリでコマンドを実行するには、_-print
_を_-exec … \;
_に置き換えます。 POSIX準拠。
_find . -type d -exec sh -c 'set -- "$0"/*.flac; [ $# -le 42 ]' {} \; -print
_
このコマンドは、ゼロの_.flac
_ファイルを含むディレクトリの検索には機能しないことに注意してください(_"$0/*.flac"
_は少なくとも1つのWordに展開されます)。代わりに、
_find . -type d -exec sh -c 'set -- "$0"/*.flac; ! [ -e "$1" ]' {} \; -print
_
Zshの同じアルゴリズム。 _**/*
_は、現在のディレクトリとそのサブディレクトリ内のすべてのファイルに再帰的に展開されます。 **/*(/)
は展開をディレクトリに制限します。 {.,**/*}(/)
は現在のディレクトリを追加します。最後に、_(e:…:)
_は、シェルコードが0を返す一致に展開を制限します。
_echo {.,**/*}(/e:'set -- $REPLY/*.flac(N); ((# <= 42))':)
_
これは、読みやすくするために2つのステップに分けることができます。
_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
ファイルがあるすべてのサブディレクトリが出力されます(両方とも除外されます)。