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

我发现了这个:

find DIR_NAME -type f ¦ wc -l

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

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


当前回答

我们可以使用树命令来递归地显示所有的文件和文件夹。以及它显示在最后一行输出的文件夹和文件的计数。

$ tree path/to/folder/
path/to/folder/
├── a-first.html
├── b-second.html
├── subfolder
│   ├── readme.html
│   ├── code.cpp
│   └── code.h
└── z-last-file.html

1 directories, 6 files

对于树命令的最后一行输出,我们可以在它的输出上使用tail命令

$ tree path/to/folder/ | tail -1
1 directories, 6 files

为了安装树,我们可以使用下面的命令

$ sudo apt-get install tree

其他回答

ls -l | grep -e -x -e -dr | wc -l 

长串 过滤文件和dirs 计算过滤后的行号

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

ls | wc -l

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

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

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

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

你可以使用

$ tree

安装后的树包用

$ sudo apt-get install tree

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

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

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

如果你想知道当前目录下每个目录下有多少文件:

for i in */ .*/ ; do 
    echo -n $i": " ; 
    (find "$i" -type f | wc -l) ; 
done

当然,这些都可以写在一行上。括号说明wc -l应该监视谁的输出(在本例中查找$i -type f)。