如果我想在包含子目录的(大)目录中找到最新的文件(mtime),我该怎么做?
我发现很多帖子都建议进行一些变化ls -lt | head
(有趣的是,许多帖子建议的ls -ltr | tail
方法相同但效率较低),除非你有子目录(我有),否则这很好。
然后,你可以
find . -type f -exec ls -lt \{\} \+ | head
这肯定会对一个命令可以指定的尽可能多的文件起作用,即如果你有一个大的目录,-exec...\+
将发出单独的命令;因此每个组将按其ls
自身进行排序,但不按整个集合进行排序;因此,头部将选择第一批的最新条目。
有什么答案吗?
答案1
您不需要重复使用外部命令(如ls
),因为find
可以通过以下操作完成所有需要的-printf
操作:
find /path -printf '%T+ %p\n' | sort -r | head
答案2
我今天遇到了类似的问题,但我没有使用 来解决它find
。我需要一个简短的方法来ssh
返回我主目录中最近编辑的文件。以下是我想到的大致内容:
ls -tp | grep -v /$ | head -1
该-p
选项用于ls
在目录中添加尾部斜杠、grep -v
删除以斜杠结尾的行(即所有目录)以及将head -1
输出限制为单个文件。
find
如果您只想返回文件名,那么这比使用要简洁得多。
答案3
这在我的系统上比 更快printf
,但我不明白为什么
find /path -type f -exec stat -c "%y %n" {} + | sort -r | head
答案4
perl
与下列物质联合使用find
:
find my_directory -type f -printf '%T@\t%p\n' | perl -ane '@m=@F if ($F[0]>$m[0]); END{print $m[1];}'
您将获得具有最大纪元的文件的名称 == 最后修改的文件。