协慌网

登录 贡献 社区

递归计数 Linux 目录中的文件

如何递归计算 Linux 目录中的文件?

我找到了这个:

find DIR_NAME -type f ¦ wc -l

但是,当我运行它时,它返回以下错误。

find:路径必须在表达式之前:¦

答案

这应该工作:

find DIR_NAME -type f | wc -l

解释:

  • -type f以仅包括文件。
  • |而非¦ )将find命令的标准输出wc命令的标准输入。
  • wc (单词计数的缩写)在其输入( docs )上对换行符,单词和字节进行计数。
  • -l仅计算换行符。

笔记:

  • DIR_NAME替换为.在当前文件夹中执行命令。
  • 您也可以删除-type f以在计数中包括目录(和符号链接)。
  • 如果文件名可以包含换行符,则此命令可能会计数过多。

您的示例为何不起作用的说明:

在显示的命令中,您并没有使用 “管道”( | )来连接两个命令,而是使用了断线( ¦ ),shell 无法将其识别为命令或类似命令。这就是为什么您收到该错误消息的原因。

对于当前目录:

find -type f | wc -l

如果要细分当前目录下每个目录中有多少个文件,请执行以下操作:

for i in */ .*/ ; do 
    echo -n $i": " ; 
    (find "$i" -type f | wc -l) ; 
done

当然,这可以全线进行。圆括号阐明了应该监视wc -l (在这种情况下,请find $i -type f