我目前正在使用它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)。
这样,排序就被限制在可管理的对象数量内。如有必要,可以方便地为命令设置别名或编写脚本,以方便输入。