如何递归地计数Linux目录中的文件?

我发现了这个:

find DIR_NAME -type f ¦ wc -l

但是当我运行它时,它返回以下错误。

查找:路径必须在表达式之前:


当前回答

你可以使用

$ tree

安装后的树包用

$ sudo apt-get install tree

(在Debian / Mint / Ubuntu Linux机器上)。

该命令不仅显示文件的计数,还分别显示目录的计数。选项-L可用于指定最大显示级别(默认情况下,它是目录树的最大深度)。

通过提供-a选项,也可以包含隐藏文件。

其他回答

这将完全正常工作。简单的短。如果要计算文件夹中存在的文件数量。

ls | wc -l

在我的电脑上,rsync比在接受的答案中找到| wc -l快一点:

$ rsync --stats --dry-run -ax /path/to/dir /tmp

Number of files: 173076
Number of files transferred: 150481
Total file size: 8414946241 bytes
Total transferred file size: 8414932602 bytes

第二行是文件的数量,在上面的例子中是150,481。作为奖励,您还可以获得总大小(以字节为单位)。

备注:

第一行是文件、目录、符号链接等的总和,这就是为什么它比第二行大。 ——dry-run(或简称-n)选项对于不实际传输文件非常重要! 我使用-x选项来“不跨越文件系统边界”,这意味着如果你为/执行它,并且附加了外部硬盘,它只会计算根分区上的文件。

对于当前目录:

find -type f | wc -l

这种过滤格式的替代方法计算所有可用的grub内核模块:

ls -l /boot/grub/*.mod | wc -l

综合这里的几个答案,最有用的解决方案似乎是:

find . -maxdepth 1 -type d -print0 |
xargs -0 -I {} sh -c 'echo -e $(find "{}" -printf "\n" | wc -l) "{}"' |
sort -n

它可以处理一些奇怪的东西,比如文件名中包含空格、圆括号甚至新行。它还根据文件数量对输出进行排序。

您可以增加-maxdepth后的数字,以获得子目录的计数。请记住,这可能会花费很长时间,特别是如果您有一个高度嵌套的目录结构,并结合了一个高-maxdepth值。