我怎样才能使“ find”以相反的时间顺序查找文件?


17

我想在按时间戳(创建时间)排序的子目录中找到文件,最近的优先。

我看过手册页,但似乎只能让您按时间戳过滤而不是按时间戳排序。

我可以通过哪些选择find来完成此任务?或者,如何将其与其他工具结合使用,例如sort按时间戳排序?


1
find除了在深度优先搜索和广度优先搜索之间进行选择之外,您无法以特定的排序顺序执行任何操作。
Jonathan Leffler 2013年

@ merlin2011,请在此处查看您选择的答案-当前选择的答案存在错误(当找到的文件数量find多于可以传递给的单个实例时,该错误会生成实际上未正确排序的输出)ls
查尔斯·达菲

@CharlesDuffy,感谢您的来信!我已经更新了接受的答案。
merlin2011 '02

Answers:


32

尽管Paul的解决方案通常可以,但它涉及的I / O不仅仅是简单的:

find bin/ -type f -printf '%Ts\t%p\n' | sort -nr | cut -f2

如果find返回数百万个文件怎么办?难道不是将所有这些排序为一个很长的列表吗?它仍然会有效吗?(而不是分别对每个目录进行排序。)
Peter Mortensen

1
不适用于文件名中的有趣字符,例如换行符
Boris Brodski

2
这仅应评论user7385的答案,但我没有做到这一点的声誉。find bin/ -type f -printf '%Ts\t%p\0' | sort -nrz | cut -f2 -z | xargs -0 ls新版本cut的-z选项,因此带有换行符的文件名将起作用。
MattBlissett

I / O的数量甚至不是首选此答案的主要原因- 正确性是更为关键的区别。xargs -0 ls -t当有太多文件xargs需要多次启动时,该方法将无法正常工作ls,但是该方法将继续起作用。
查尔斯·达菲

@PeterMortensen,“将它们全部分类为一个很长的列表”是对它们进行排序的唯一方法,它实际上会返回正确的结果。而且,另一个/接受的答案也不会 “独立地对每个目录进行排序”(如果一个人只想对一个目录进行排序而不递归,则可以-maxdepth 1在上使用find)。
查尔斯·达菲
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.