2010-10-12 21:41:12 +0000 2010-10-12 21:41:12 +0000
217
217

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

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

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

例如,给定这个目录树:

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

如果我输入/home,我想让它返回四个文件。或者,如果它返回4个文件和2个目录,则可加分。基本上,我希望在Windows中右击一个文件夹,选择属性,然后查看该文件夹中包含了多少文件/文件夹。我有一个解决方案,涉及到我写的Python脚本,但为什么不能像运行ls | wc或类似的程序那样简单?

答案 (5)

364
364
364
2010-10-12 21:44:53 +0000

find . -type f | wc -l

解释: find . -type f在这个(.)目录下找到所有的文件(类型的f**)和所有子目录中的文件,然后将文件名打印出来,每行一个。

49
49
49
2011-03-28 22:00:38 +0000

上面的答案已经回答了这个问题,但是我要补充的是,如果你使用不带参数的find(除了你希望搜索的文件夹以外),比如:

find . | wc -l

,那么搜索的速度会快很多,几乎是瞬时的,至少对我来说是这样。这是因为类型子句必须对每个名称运行一个stat()系统调用来检查它的类型–省略它就可以避免这样做。计算文件夹的数量仍然可以让我找到有大部分文件的文件夹,我需要的是速度而不是精度。

26
26
26
2010-10-12 21:56:03 +0000

对于文件:

find -type f | wc -l

对于目录:

find -mindepth 1 -type d | wc -l

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

8
8
8
2010-10-13 01:58:12 +0000

使用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"

如果你想搜索文件和目录,不需要调用两次find。

8
8
8
2010-10-13 14:26:17 +0000

对已接受的答案稍作更新,如果你想计算dirs之类的

find $DIR -exec stat -c '%F' {} \; | sort | uniq -c | sort -rn
```,请稍作更新。