获取上次修改/创建文件的有效方法

获取上次修改/创建文件的有效方法

我有一个包含很多文件(网站生成的各种日志)的文件夹。

设法统计它们的数量:

$ find . -maxdepth 1|wc -l
803313

现在我需要检查过去几天的日志。获取最后 100 / 1000 / ... 个文件也不错。问题是上述命令大约需要 5 秒钟。因此,在将近 100 万个文件的情况下,我的常规方法ls -lrt|tail -n 100不是一个选择。

那么,关于如何有效获取最后修改的文件有什么想法吗?

PS:使用 Ubuntu 12.04 LTS

答案1

Find 本身可以过滤某个时间范围内的文件。你说你想要几天前更新的文件:

find . -maxdepth 1 -ctime -3

这将查找过去 3 天内更改的所有文件。

您可以使用 -ctime(文件状态更改)、-mtime(文件的数据更改)和 -atime(文件访问更改)。

如果您需要更精细的粒度,请使用 -cmin、-mmin 和 -amin(使用分钟而不是天)。

时间范围可以是普通数字,也可以使用 +/- 符号,如下所示:

  Numeric arguments can be specified as

   +n     for greater than n,

   -n     for less than n,

   n      for exactly n.

因此-mtime -3将返回 3 天(及更短)前修改的文件。-mtime 3将返回 3 天前修改的文件(请注意,小数部分将被丢弃,因此这将返回 3 至 4 天前修改的文件)。-mtime +3将返回 3 天(及以上)前修改的所有文件。

答案2

您可以使用 printf 打印日期,%T@像 unix 时间戳一样提供修改时间:

find . -type f -printf "%T@ %p\n" | sort -rn | head -n 10

对于包含 250,000 个文件的文件夹,这需要 10 秒。

边注:查找您可以使用

find . -type f -printf "%T@\0%p\0" | gawk ' { if ($0>max) { max=$0; getline mostrecent } else getline } END{print mostrecent}' RS='\0'

对于 250,000 个文件来说,这只需不到 2 秒的时间。

相关内容