我有一个目录,里面有很多文件和目录。
我正在尝试获取每个目录中递归包含的文件(和目录)的数量。
我尝试了以下方法:
for dir in $(find -maxdepth 1 -type d); do echo "$dir"; echo find "$dir" | wc -l; done
Run Code Online (Sandbox Code Playgroud)
但这对于每个目录都会返回“1”作为结果。
我知道还有其他几个问题有类似的问题,但我真的很想知道我在上面的代码中的错误是什么。
GNU ( bash, wcand find) 解决方案,适用于任何路径,甚至包含空格、换行符或以破折号开头的路径:
shopt -s nullglob
for dir in ./*/
do
printf '%s\n' "$dir"
find "$dir" -mindepth 1 -printf x | wc --chars
done
Run Code Online (Sandbox Code Playgroud)
解释:
nullglob如果不./包含目录,该选项可防止错误。./目录中的水珠确保文件名以破折号(” -“)将不会弄乱echo或find。-mindepth 1 避免计算目录本身。shopt -s dotglob在for循环之前运行。