我正在运行一个脚本来查看目录及其子目录中的所有文件。
该脚本已经运行了一天,我想估计它将继续运行多长时间。我知道到目前为止它处理了多少文件(73,000,000),但我不知道文件总数。
计算文件的最快方法是什么?
我尝试右键单击目录并选择“属性”,然后慢慢计数。 我尝试将ls重定向到一个文件,它只是搅拌和放大搅动...
我应该用c编写程序吗?
答案 0 :(得分:6)
最简单的方法:
find <dir> -type f | wc -l
稍微快点,或许:
find <dir> -type f -printf '\n' | wc -l
答案 1 :(得分:5)
我做了一个快速的研究。使用包含100,000个文件的目录,我比较了以下命令:
ls -R <dir>
ls -lR <dir>
find <dir> -type f
我跑了两次,一次重定向到一个文件(>file
),然后输入wc(|wc -l
)。以下是以秒为单位的运行时间:
>file |wc
ls -R 14 14
find 89 56
ls -lR 91 82
>file
和|wc -l
之间的差异小于ls
和find
之间的差异。
似乎ls -R
至少 4x 比find
快。
答案 2 :(得分:1)
我知道的最快:
ls | wc -l
注意:请记住,它列出了目录中的所有节点,包括子目录以及对当前和父目录的两个引用(.
&amp; {{1} })。
如果您需要所有子目录中的文件的递归计数(而不是当前目录中包含子目录的所有内容),那么您可以将“递归”标志添加到..
命令:
ls
如果你将速度与使用ls -R | wc -l
的建议进行比较,你会发现它更快(因子2到10),但请记住上面的注释。