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

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

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

find . -type f | wc -l

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

find . -type d | wc -l

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

输出结果如下

6 directories, 14 files

答案1

使用tree

$ tree foo
foo
├── bar
│   ├── baz
│   └── foo3
└── foo2

2 directories, 2 files

或者你可以结合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}'

或者,概括一下:

find foo -printf "%y\n" | awk '/f/{f++}/d/{d++}END{printf "%d directories, %d files\n", d, f}'

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

find foo -printf "%y\n" | sort | uniq -c

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

答案2

您可以像下面这样操作:

d=$(find . -type d | wc -l)
f=$(find . -type f | wc -l)
echo "There are $d directories and $f files"

就我而言,输出是There are 459 directories and 2352 files

高血压

相关内容