有原因吗
find . -mindepth 1 -maxdepth 1 | wc -l
建议反对
ls -1 | wc -l
(反之亦然?)
计算文件夹中文件/目录的总数
注意:
.
\n
。答案 0 :(得分:4)
第一个命令......
find . -mindepth 1 -maxdepth 1 | wc -l
...将列出以.
开头的文件和目录,而ls
命令则不会。等效的ls
命令是:
ls -A | wc -l
两者都会给你相同的答案。正如大家在评论中指出的那样,如果有包含嵌入换行符的条目,这两个都会给你错误的答案,因为上面的命令只是计算输出行数。
这是计算独立文件数量的一种方法 文件名怪癖:
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0i echo | wc -l
这会将文件名传递给xargs
并使用NUL
终止符,而不是依赖换行符,然后xargs只为每个文件打印一个空行,我们计算输出的行数xargs
。
答案 1 :(得分:1)
find(1)
首选ls(1)
的原因是
ls
默认排序文件列表 find
没有排序功能对于大型数据集,排序可能非常耗费内存。因此,即使您可以使用ls -f
或ls -U
来禁用排序,我发现使用find
更安全,因为我知道目录列表不会是排序,无论传递给它的是什么选项。
在任何情况下,告诉命令打印较少的每个文件可以帮助提高性能和正确性。性能,因为该命令可以避免stat(2)
调用和正确性,因为如果您只打印inode,你会确定文件的名称不会影响输出(例如换行符,回车符或其他奇数字符。)