首页 > 解决方案 > 递归查找具有特定扩展名的文件数的脚本

问题描述

我们有一个高度嵌套的目录结构,我们有一个目录,我们称之为“我的目录”,在我们的层次结构中出现了很多次。我有兴趣计算所有名为“my Dir”的目录中“*.csv”文件的数量(是的,名称中有一个空格)。我该怎么办?

我尝试过这样的事情,但它不起作用:
find . -type d -name "my Dir" -exec ls "{}/*.csv" \; | wc -l

标签: shellsh

解决方案


如果您想要在“我的目录”下匹配模式 '*.csv'的文件数,那么:

  • 不要要求-type d; 索取-type f
  • 不要问-name "my Dir"你是否真的想要-name '*.csv'
  • 不要尝试ls *.csv每场比赛,因为如果目录中有更多的 N csv 文件,您可能会计算每个 N 次
  • 还要小心{}嵌入-exec代码

对于来自 的文件计数find,我喜欢使用从U&L 上的Stéphane Chazelas学到的技巧;例如,来自:Counting files in Linux

find "my Dir" -type f -name '*.csv' -printf . | wc -c

这需要 GNU find,因为-printf它是 POSIX 标准的 GNU 扩展。

它通过在“我的目录”(从当前工作目录)中查找与模式匹配的文件来工作;对于每个匹配的文件,它会打印一个点(句点);这一切都通过管道传递给wc谁计算了产生的字符(句点)find的数量——匹配文件的数量。


推荐阅读