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)
如果统计了不止一种文件类型,则应显示每个子目录中它们的总数量。
大概是这个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第一个位置参数的值。$1find命令中-iregex表示不区分大小写的正则表达式(您可以使用-regex)。