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

我发现了这个:

find DIR_NAME -type f ¦ wc -l

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

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


当前回答

如果您想知道当前工作目录中存在多少文件和子目录,可以使用这一行程序

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

这将在GNU风格下工作,对于BSD linux(例如OSX),只需在echo命令中省略-e即可。

其他回答

你可以使用

$ tree

安装后的树包用

$ sudo apt-get install tree

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

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

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

如果你想避免错误的情况,不要让wc -l看到有换行符的文件(它将被算作2+文件)

例:考虑这样一种情况,我们有一个文件,其中只有一个EOL字符

> mkdir emptydir && cd emptydir
> touch $'file with EOL(\n) character in it'
> find -type f
./file with EOL(?) character in it
> find -type f | wc -l
2

因为至少gnu wc似乎没有一个选项来读取/计数一个以空结束的列表(除了从文件中),最简单的解决方案就是不传递文件名,而是每次找到文件时输出一个静态输出,例如在上面的同一个目录中

> find -type f -exec printf '\n' \; | wc -l
1

或者你的发现是否支持

> find -type f -printf '\n' | wc -l
1 
ls -l | grep -e -x -e -dr | wc -l 

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

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

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

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

对于当前目录:

find -type f | wc -l