计算每个子目录具有特定扩展名的文件数量

use*_*965 6 command-line scripts

来源:具有任意数量和类型的文件的任何目录树。问:每个子目录中有多少个.jpgor.jpg.png(例如)?

如何限制具有 1 个或多个特定扩展名的文件的以下代码?-type f -name "*.jpg*"例如,插入时遇到问题。

for DIR in $(find . -maxdepth 99 -type d)
do
    printf "%10d\t%s\n" $(find ${DIR}|wc -l) "${DIR}" 
done
Run Code Online (Sandbox Code Playgroud)

期望的输出:

118   ./aaa
 73   ./aaa/bbb
 16   ./aaa/bbb/ccc
Run Code Online (Sandbox Code Playgroud)

如果统计了不止一种文件类型,则应显示每个子目录中它们的总数量。

pa4*_*080 4

大概是这个find| xargs解决方案将根据您的需要工作。

find . -mindepth 1 -maxdepth 99 -type d -print0 | \
xargs -0 -i bash -c 'printf "%10d\t%s\n" "$(find "$1" -maxdepth 1 -type f -regextype awk -iregex ".*\.(jpg|jpeg|png)" | wc -l)" "$1"' - '{}'
Run Code Online (Sandbox Code Playgroud)

一些解释:

  • 添加该-mindepth 1选项是为了跳过当前目录并仅处理子目录。
  • -print0输出条目提供空分隔符,它与 选项一起-0使用xargs
  • - "{}"末尾的选项将传递参数作为bash 命令的xargs第一个位置参数的值。$1
  • 在第二个find命令中-iregex表示不区分大小写的正则表达式(您可以使用-regex)。