计算目录中的总文件数 - find vs ls
Counting total files in directory - find vs ls
有没有理由
find . -mindepth 1 -maxdepth 1 | wc -l
建议反对
ls -1 | wc -l
(或者反之亦然?)
计算一个文件夹内files/directories的总数
备注:
- 这个问题更关心只是计算的东西。
- 没有以
.
开头的文件
- 可能有非标准文件,其中包含
\n
。
第一个命令...
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
.
的输出
find(1)
优于ls(1)
的原因是
ls
默认排序文件列表
find
没有排序能力
对于大型数据集,排序可能会非常消耗内存。因此,即使您可以使用 ls -f
或 ls -U
来禁用排序,我发现使用 find
更安全,因为我 知道 目录列表获胜' 被排序,无论传递给它什么选项。
无论如何,告诉命令少打印每个文件有助于提高性能和正确性。性能,因为命令可以避免 stat(2)
调用和正确性,因为如果你例如仅打印 inode,您可以确定文件名不会影响输出(例如换行符、回车符 returns 或其他奇数字符。)
有没有理由
find . -mindepth 1 -maxdepth 1 | wc -l
建议反对
ls -1 | wc -l
(或者反之亦然?)
计算一个文件夹内files/directories的总数
备注:
- 这个问题更关心只是计算的东西。
- 没有以
.
开头的文件
- 可能有非标准文件,其中包含
\n
。
第一个命令...
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
.
find(1)
优于ls(1)
的原因是
ls
默认排序文件列表find
没有排序能力
对于大型数据集,排序可能会非常消耗内存。因此,即使您可以使用 ls -f
或 ls -U
来禁用排序,我发现使用 find
更安全,因为我 知道 目录列表获胜' 被排序,无论传递给它什么选项。
无论如何,告诉命令少打印每个文件有助于提高性能和正确性。性能,因为命令可以避免 stat(2)
调用和正确性,因为如果你例如仅打印 inode,您可以确定文件名不会影响输出(例如换行符、回车符 returns 或其他奇数字符。)