在包含一百万个文件的目录中查找最新文件

在包含一百万个文件的目录中查找最新文件

我目前正在使用它ls -t | head -1来获取最新文件的名称。但这需要很长时间,因为我的目录中有上百万个文件。我猜在ls -t输出上百万个文件的列表时会不必要地浪费大量时间,除了第一个文件之外的所有文件都将被拒绝。

有没有更快捷的方法?比如,直接告诉ls只输出第一行?

答案1

我敢打赌,所有的时间都花在比较文件的创建日期上:尽管与N^2(实际上就像N对数N对于智能排序算法来说,这仍然很长。

以下命令

  find . -type f -printf '%T+ %p\n' | sort -r | head -1

查找当前目录中的所有文件,从最新到最旧的顺序列出它们,然后仅打印第一项。

可以方便地进行修改,例如如下:

  find . -type f -mtime -1 -printf '%T+ %p\n' | sort -r | head -1

此命令仅查找最近一天创建的文件(-mtime -1),并仅对这些文件进行排序。希望这足以将搜索限制在少数项目中。

如果您需要更精细的控制,您可以使用:

  find . -type f -mmin -5 -printf '%T+ %p\n' | sort -r | head -1

例如,仅选择 5 分钟内创建/修改的文件(-mmin -5)。

这样,排序就被限制在可管理的对象数量内。如有必要,可以方便地为命令设置别名或编写脚本,以方便输入。

相关内容