我该如何找到目录中包含少于 x 个.flac
文件的所有文件夹?
答案1
.flac
对于每个子目录,如果子目录中最多有 42 个文件,则打印子目录名称。要在目录上执行命令,请替换-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:…:)
将扩展限制为 shell 代码返回 0 的匹配项。echo {.,**/*}(/e:'set -- $REPLY/*.flac(N); ((# <= 42))':)
为了便于理解,可以将其分为两个步骤。
few_flacs () { set -- $REPLY/*.flac(N); ((# <= 42)); } echo {.,**/*}(/+few_flacs)
更新日志:
• 正确处理 x=0。
答案2
替换$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