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

omg*_*i2u 238 linux command-line

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

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

例如,给定这个目录树:

/home/blue
/home/red
/home/dir/green
/home/dir/yellow
/home/otherDir/
Run Code Online (Sandbox Code Playgroud)

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

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

Nif*_*fle 393

find . -type f | wc -l

说明:在此 ( . ) 目录和所有子目录中
find . -type f查找所有文件 ( -type f ),然后将文件名打印为每行一个标准输出。

这是然后管道| into wc(word count)-l选项告诉 wc 只计算其输入的行数。

它们一起计算您的所有文件。

  • 由于来自`find`输出的最后一个换行符,这不会处理逐一错误 (3认同)
  • 当没有找到文件时,结果为`1` (2认同)

小智 49

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

find . | wc -l
Run Code Online (Sandbox Code Playgroud)

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

这具有返回文件数和文件夹数而不是仅文件数的区别,但至少对我来说这已经足够了,因为我主要使用它来查找哪些文件夹具有大量需要永远复制和压缩它们的文件。计数文件夹仍然允许我找到包含大多数文件的文件夹,我需要的速度比精度更高。


cYr*_*rus 26

对于文件:

find -type f | wc -l
Run Code Online (Sandbox Code Playgroud)

对于目录:

find -mindepth 1 -type d | wc -l
Run Code Online (Sandbox Code Playgroud)

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


use*_*894 8

用 bash 4+

shopt -s globstar
for file in **/*
do
  if [ -d "$file" ];then
    ((d++))
  elif [ -f "$file" ];then
     ((f++))
  fi
done
echo "number of files: $f"
echo "number of dirs: $d"
Run Code Online (Sandbox Code Playgroud)

如果要搜索文件和目录,无需调用 find 两次


Ric*_*lka 8

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

find $DIR -exec stat -c '%F' {} \; | sort | uniq -c | sort -rn
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

271606 次

最近记录:

11 年,5 月 前