可能重复:
如何使用 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