Bash:查找包含少于 x 个文件的文件夹

Bash:查找包含少于 x 个文件的文件夹

我该如何找到目录中包含少于 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

相关内容