如何递归计算给定目录中的文件和目录数

May*_*hux 6 command-line

我可以在给定目录中递归查找文件数

find . -type f | wc -l
Run Code Online (Sandbox Code Playgroud)

我可以在给定目录中递归地找到目录数

find . -type d | wc -l
Run Code Online (Sandbox Code Playgroud)

但是我想要一个命令,它同时在给定目录中递归显示文件和目录的数量。

输出将类似于

6 directories, 14 files
Run Code Online (Sandbox Code Playgroud)

mur*_*uru 5

使用tree

$ tree foo
foo
??? bar
?   ??? baz
?   ??? foo3
??? foo2

2 directories, 2 files
Run Code Online (Sandbox Code Playgroud)

或者你可以结合findawk

find foo -type d -printf "d\n" -o -type f -printf "f\n" | awk '/f/{f++}/d/{d++}END{printf "%d directories, %d files\n", d, f}'
Run Code Online (Sandbox Code Playgroud)

或者,概括:

find foo -printf "%y\n" | awk '/f/{f++}/d/{d++}END{printf "%d directories, %d files\n", d, f}'
Run Code Online (Sandbox Code Playgroud)

如果您不介意简洁的输出:

find foo -printf "%y\n" | sort | uniq -c
Run Code Online (Sandbox Code Playgroud)

这将比tree-tree的输出中不计入起始目录多一个目录。