我想找到一个文件夹及其所有子文件夹下的文件总数。

#1 楼

可能类似于

find . -type f | wc -l

可以解决问题。从父文件夹尝试命令。

find . -name <pattern> -type f查找.和子文件夹中的所有文件。结果(找到的文件列表)被传递(|)到wc -l,后者对行数进行计数。 -name <pattern>仅查找某些文件。

评论


该解决方案将对名称包含换行符的文件失败。

–用户未知
2011年4月8日在14:23

@user未知:find。型f -ls | wc -l

–安排
13年11月22日在21:24

甚至更快:查找。型f -print0 | tr -d -c'\ 0'| wc -c

–安排
13年11月22日在21:44

@arrange:甚至更快:find。类型的f -printf。 | wc -c-我采用print作为解决方案,而不是我的-exec echo。

–用户未知
13年11月23日在3:41



请注意,这还会计算以点开头的隐藏文件。我认为这是一个功能,而不是错误,但是很高兴知道。

– cgogolin
16 Jan 17 '13 at 13:13

#2 楼

使用tree命令。您可能需要安装tree软件包。

它将列出给定文件夹下的所有文件和文件夹,并在末尾列出摘要。

#3 楼

要在当前目录的根目录中计数文件(甚至没有扩展名的文件),请使用:

ls -l | grep ^- | wc -l


从目录中递归计数文件(甚至没有扩展名的文件)。当前目录的根目录,使用:

ls -lR | grep ^- | wc -l


评论


这些将不计入隐藏文件。

–用户未知
19年4月20日在2:42

真正。我更倾向于接受并使用您的答案作为解决方案。

–user38537
19年4月23日在18:17

实际上,在Subversion或git存储库中工作时,不计算隐藏文件/隐藏目录中的文件是一个有用的功能!

–lfurini
20年4月8日13:00

这在大型文件夹上非常慢,因为ls -l将对输出进行排序。

–Dr_Zaszuś
20年7月12日在7:25

#4 楼

最快和最简单的方法是使用tree。它的速度受输出端子的限制,因此,如果将结果通过管道传输到tail -1,则会立即得到结果。您还可以使用-L选项控制您喜欢结果的目录级别。对于彩色输出,请使用-C。例如:

$ tree share/some/directory/ | tail -1
558 directories, 853 files

$ tree -L 2 share/some/directory/ | tail -1
120 directories, 3 files


如果尚不存在,可以在这里获取。

#5 楼

find -type f -printf . | wc -c


不要计算find的输出行,因为包含99个换行符的文件名将计为100个文件。

评论


包含换行符的文件名是一种极为罕见的边缘情况。

–心怀不满的山羊
13年7月22日在13:49

@DisgruntledGoat:因此很难发现错误。

–用户未知
2013年7月23日在2:41



我喜欢一个很好的案例,尤其是多年以后。

–user38537
19年4月20日在2:16

#6 楼

对路径中的每个文件夹使用此命令

for D in *; do echo $D; find $D -type f| wc -l; done


#7 楼

您可以使用find . | wc -l

find .将从当前文件夹开始列出所有文件和文件夹及其内容。 wc -l计算find
的结果

评论


此解决方案还计算了文件夹的数量,我给它打上标记是因为它与我不想在其中进行计数的场合相符:)

–裸照
2011年4月8日在12:12

该解决方案将对名称包含换行符的文件失败。

–用户未知
2011年4月8日在14:23

#8 楼

查找似乎比树还快,因此我在下面使用下面的方法对当前工作目录的每个目录中的文件进行计数(忽略CWD中的文件),并允许目录中包含空格:

ls -d */ | while read dir_line do echo -n "$dir_line :" find "$dir_line" -type f | wc -l done

评论


解析ls的输出是非常糟糕的主意。

– souravc
16年7月21日在14:49



很棒的代码,如何以增加或减少文件数量排列输出行

–夜行者
17年11月19日在10:08

#9 楼

我会自己使用此选项:


ls -alR | grep -c ^-


评论


请添加一些详细信息...

– Pierre.Vriens
16年5月29日在7:18