计算目录中的总文件数 - 查找vs ls

时间:2016-05-10 03:28:06

标签: bash find ls

有原因吗

find . -mindepth 1 -maxdepth 1 | wc -l

建议反对

ls -1 | wc -l

(反之亦然?)

计算文件夹中文件/目录的总数

注意:

  1. 这个问题更关注只计算的东西。
  2. 没有带有.
  3. 的文件
  4. 可能有非标准文件,其中包含\n

2 个答案:

答案 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 -fls -U来禁用排序,我发现使用find更安全,因为我知道目录列表不会是排序,无论传递给它的是什么选项。

在任何情况下,告诉命令打印较少的每个文件可以帮助提高性能和正确性。性能,因为该命令可以避免stat(2)调用和正确性,因为如果您只打印inode,你会确定文件的名称不会影响输出(例如换行符,回车符或其他奇数字符。)