递归计算目录中的所有文件

递归计算目录中的所有文件

可能重复:
如何使用 Linux 计算驱动器中的文件夹数量?

我的 Linux 机器上有一个非常深的目录树。我想统计该路径中的所有文件,包括所有子目录。

例如,给定以下目录树:

/home/blue
/home/red
/home/dir/green
/home/dir/yellow
/home/otherDir/

如果我传入/home,我希望它返回四个文件。或者,如果它返回四个文件和两个目录,那就更好了。基本上,我想要的效果相当于在 Windows 上右键单击文件夹并选择属性,然后查看该文件夹中包含多少个文件/文件夹。

我怎样才能最轻松地做到这一点?我有一个涉及我编写的 Python 脚本的解决方案,但为什么它不像运行ls | wc或类似操作那样简单?

答案1

find . -type f | wc -l

解释:
find . -type f查找所有文件(-类型 f) 在本 () 目录及其所有子目录中的文件名将每行一个地打印到标准输出。

然后将其通过管道传输|进入wc(字数统计)-l选项告诉 wc 仅计算其输入的行数。

它们会将您的所有文件合并在一起。

答案2

上面的答案已经回答了这个问题,但我想补充一点,如果你使用不带参数的 find(除了你想要搜索的文件夹),如下所示:

find . | wc -l

搜索速度更快,几乎是即时的,至少对我来说是这样的。这是因为 type 子句必须对每个名称运行 stat() 系统调用来检查其类型 - 省略它可以避免这样做。

这与返回文件数加上文件夹数(而不是仅返回文件数)不同,但至少对我来说已经足够了,因为我主要使用它来查找哪些文件夹包含大量文件,而复制和压缩这些文件需要很长时间。计数文件夹仍然允许我找到包含最多文件的文件夹,我需要更快的速度而不是更精确的速度。

答案3

对于文件:

find -type f | wc -l

对于目录:

find -mindepth 1 -type d | wc -l

它们都在当前工作目录中工作。

答案4

如果您想要计算目录数等,请对已接受的答案进行轻微更新

find $DIR -exec stat -c '%F' {} \; | sort | uniq -c | sort -rn

相关内容