我想计算空目录和非空目录的数量。但所有空目录以及包含文件和子目录的目录的大小都相同 4096。因此,由于 4096 大小,空目录也算在非空目录中。并且空目录的计数为零。
答案1
如果您关心的只是空虚,这find
似乎是最直接的工具。
find . -type d -empty
将列出当前目录中的所有空文件夹。更改点以在其他地方搜索。
find . -maxdepth 1 -type d -empty
将避免查看子目录。
最终目标是对它们进行计数,因此基于@alecxs 评论:
find . -maxdepth 1 -type d -empty -printf '\n' | wc -l
。这样做的优点是不会为每个目录分叉一个进程,因此速度应该更快,特别是在空目录数量很大的情况下。
答案2
我通常将 bash 的文件夹大小别名放入 (/root/).bashrc
alias ds='du --max-depth=1 -ch'
所以我不会每次都输入完整的内容。这将以人类可读的格式列出文件夹大小,即(4K、1M、2G),
因此您只需发出此命令并通过 grep 进行管道传输,如下所示:
ds |grep -c 4.0K
这将计算空目录或:
ds |grep -cv 4.0K
将计算非空目录
如果您不想使用别名,只需替换ds
为du --max-depth=1 -ch
如果您想绝对精确,您可以跳过h
并执行以下操作:
du --max-depth=1 -cb |grep -c "^4096"$'\t'
请注意,如果目录有 4096B 的目录大小也会显示符号链接内部或文件0B的大小,所以这将不是正确显示空目录计数,因此可能更好地将上述解决方案与 find 一起使用
我通常使用的另一个有用的东西是列出大目录(大于1G并对它们进行排序)
ds |grep "G"$'\t' |sort -n
这应该有帮助。