如何递归地计算 Linux 目录中的文件?
我发现这个:
find DIR_NAME -type f ¦ wc -l
但是当我运行它返回以下错误。
查找:路径必须在表达式之前:
这应该有效:
find DIR_NAME -type f | wc -l
说明:
-type f
以仅包含文件。
|
(而不是¦
)将find
命令的标准输出重定向到wc
命令的标准输入。
wc
(字数的缩写)对其输入(docs)上的换行,单词和字节进行计数。
-l
只计算换行符。
将DIR_NAME
替换为.
以在当前文件夹中执行命令。
您还可以删除-type f
以在计数中包含目录(和符号链接)。
如果文件名可以包含换行符,则此命令可能会过量。
为什么您的示例不起作用的说明:
在您显示的命令中,您不使用“Pipe”(|
)来连接两个命令,而是使用 s 不识别为命令或类似命令的断条(¦
)。
对于当前目录:
find -type f | wc -l
如果您想了解当前目录下每个目录中的文件数量:
for i in */ .*/ ; do
ec -n $i": " ;
(find "$i" -type f | wc -l) ;
done
当然,这可以在一行上进行。括号阐明了应该监视谁的输出wc -l
(在这种情况下为find $i -type f
)。
在我的电脑上,rsync
比接受的答案中的find | wc -l
快一点:
$ rsync --stats --dry-run -ax /path/to/dir /tmp
Number of files: 173076
Number of files transferred: 150481
Total file size: 8414946241 bytes
Total transferred file size: 8414932602 bytes
第二行有文件的数量,150,481 在上面的例子中,作为奖励,你得到的总大小(以字节为单位)。
备注:
第一行是文件,目录,符号链接等的计数,这就是为什么它比第二行大。
--dry-run
(或-n
)选项对于不实际传输文件很重要!
我使用-x
选项来“不跨越文件系统边界”,这意味着如果您为/
执行它,并且您连接了外部硬盘,它将只计算根分区上的文件。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(37条)