查找文件夹和子文件夹中的文件数?


142

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

Answers:


221

可能像

find . -type f | wc -l

会成功的 从父文件夹尝试命令。


3
对于名称包含换行符的文件,该解决方案将失败。
用户未知

2
@user未知:find . -type f -ls | wc -l
安排

1
甚至更快:find . -type f -print0 | tr -d -c '\0' | wc -c

13
@arrange:甚至更快:find . -type f -printf . | wc -c-我将打印用于解决方案,而不是-exec echo。
用户未知,

1
在我的情况下,此命令就像一个
咒语

27

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

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


14

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

ls -l | grep ^- | wc -l

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

ls -lR | grep ^- | wc -l

1
这些将不计入隐藏文件。
用户未知

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

13

最快,最简单的方法就是使用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

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


9
find -type f -printf . | wc -c

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


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

8
@DisgruntledGoat:因此很难发现错误。
用户未知

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


1

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

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



很棒的代码,我如何安排输出行数以增加或减少的文件数表示
nightcrawler

0

您可以使用 find . | wc -l

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


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

对于名称包含换行符的文件,该解决方案将失败。
用户未知

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.