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




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

例如,给定以下目录树:

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


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

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

评论

如果您的定位数据库是最新的,则不完全是您要查找的内容,而是要获得非常快速的总计: wc -l(或在我的Mac上:找到-c / some / path)。但是:这还将计算/ this / other / path / with / some / path中的文件,并计算文件夹本身。

顺便说一句,这是一个不同但密切相关的问题(计算驱动器上的所有目录)和解决方案:superuser.com/questions/129088/…

#1 楼

find . -type f | wc -l

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

然后用管道输送|进入wc(字数统计)后,-l选项告诉wc仅对输入的行进行计数。

它们一起对所有文件进行计数。

评论


由于find输出中的最后一个换行符,因此无法处理一次性错误

– RobertDeRose
19年2月20日在22:22

仅用于计数目录,请使用'-type d'而不是'-type f':D

–MevlütÖzdemir
19 Mar 12 '19 at 13:49

如果找不到文件,则结果为1

– Dylanthepiguy
19年5月30日,3:15

#2 楼

上面的答案已经回答了这个问题,但是我要补充一点,如果您使用无参数的find(除了要进行搜索的文件夹除外),如:

find . | wc -l


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

返回文件和文件夹而不是仅返回文件的数量是不同的,但是至少对我来说这是足够的,因为我主要使用它来查找哪些文件夹中有大量文件永远复制和压缩它们。计数文件夹仍然可以让我找到包含最多文件的文件夹,我需要的不仅仅是速度。

评论


如果找不到文件,则结果为1

– Dylanthepiguy
19年5月30日,3:15

#3 楼

对于文件:

find -type f | wc -l


对于目录:

find -mindepth 1 -type d | wc -l


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

评论


如果找不到文件,则结果为1

– Dylanthepiguy
19年5月30日,3:15

#4 楼

使用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两次。

#5 楼

如果您要计算dirs之类的内容,请稍作更新以接受答案

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


评论


在Mac / BSD上:找到$ DIR -exec stat -f'%HT'{} \; |排序uniq -c | sort -rn(这里,对于常规文件,类型%T为空,对于可执行文件,星号为文件夹,对于文件夹为斜杠;因此,需要%HT,或一些其他文本,以避免不计算空间,例如>%T。)

– Arjan
2010-11-13 10:03



在我的10.13.6 Mac上给我“查找:非法选项-e”

– K.-Michael Aye
18-10-23在1:22