Linux 如何按年龄快速统计目录中的文件/文件夹?

Linux 如何按年龄快速统计目录中的文件/文件夹?,linux,bash,Linux,Bash,我正在尝试通过以下方式获取/tmp中早于1天的所有文件或文件夹的计数: find /tmp/* -ctime +1 | wc -l 这需要30分钟来运行。然而,ls/tmp | wc-l在一秒钟内运行,显示只有大约50000个文件 为什么find这么慢?我如何加速它 编辑:您可以通过运行以下命令自己模拟此情况: python -c "import tempfile, os; [os.close(tempfile.mkstemp()[0]) for i in range(50000)]" 然

我正在尝试通过以下方式获取/tmp中早于1天的所有文件或文件夹的计数:

find /tmp/* -ctime +1 | wc -l
这需要30分钟来运行。然而,
ls/tmp | wc-l
在一秒钟内运行,显示只有大约50000个文件

为什么
find
这么慢?我如何加速它

编辑:您可以通过运行以下命令自己模拟此情况:

 python -c "import tempfile, os; [os.close(tempfile.mkstemp()[0]) for i in range(50000)]"
然后运行我的
find
命令。

通过ls列出当前文件,并统计tmp文件夹中的文件/文件夹: 例子:
这将只根据您的要求列出今天的文件,根据您的需要更改日期。@anubhava
-not
是GNU扩展,GNU find还有
-printf
,比
-exec printf
快。让查找速度变慢的是
-ctime+1
主要的find调用
stat
系统调用,用于评估每个文件/目录的查找速度,因此打印和计算字符不会带来明显的性能改进。好吧,但我还提出了其他几点counts@anubhava为什么我要排除符号链接?我也想数一数。在我的系统上,使用
find
命令计算
50000
文件需要
0.53
秒。我怀疑您的
/tmp/
目录中存在一些错误的符号链接或NFS路径。值得注意的是,“ls/tmp”只会提取/tmp中的文件列表。无需统计文件-只需少数readdir/getdents调用即可。而find/tmp/*-ctime将强制每个文件上都有一个stat+递归访问子文件夹。最有可能的是,ls-l将需要更长的时间来执行,因为将使用per file stat强制执行。
ls -R -al --time-style=+%D /tmp | grep `date +%D`|wc -l