Ubuntu“find”命令用于计算每个目录中的文件数量,结果出乎意料

Ubuntu“find”命令用于计算每个目录中的文件数量,结果出乎意料

我使用 find 命令来列出每个目录和子目录中的文件数量。这是命令

find . -maxdepth 100 -mindepth 2 -type f -printf "%h\0" | uniq -zc | tr '\0' '\n'

但是,我得到了重复的输出。例如,

 20 ./WDE/J/P
  2 ./WDE/J/P/Base47
 23 ./WDE/J/P/Base47/b
 12 ./WDE/J/P/Base47
 72 ./WDE/J/P/Base47/c
 46 ./WDE/J/P/Base47
  7 ./WDE/J/P
 23 ./WDE/J/P/z
 23 ./WDE/J/P

目录 P 有 2 个子目录和 50 个文件。它们被分组为 20 7 23 个文件,加起来确实有 50 个。Base47 有 2 个目录和 60 个文件。b、c 和 z 的计数是正确的。我不知道为什么 50 和 60 个文件被分成不同的行。在 J 树中没有隐藏文件或带有特殊字符或空格的文件名。但 WDE 驱动器上有带空格等的文件。我尝试过其他“查找”格式,但这是唯一一种不会产生错误(例如“没有这样的文件或目录”或“权限被拒绝”)的格式,即使我使用的是 sudo。

谢谢。

答案1

这意味着find生成了一个序列,其中的条目./WDE/J/P/Base47没有形成单个行块,./WDE/J/P/Base47/b并且./WDE/J/P/Base47/c插入。对于./WDE/J/P:其他行也同样插入。

您需要在sort之前uniq。您的命令已修改:

find . -maxdepth 100 -mindepth 2 -type f -printf "%h\0" | sort -z | uniq -zc | tr '\0' '\n'

相关内容