在进行递归调用时,ls似乎没有正确地对文件进行排序:
ls -altR . | head -n 3
如何在目录(包括子目录)中找到最近修改的文件?
在进行递归调用时,ls似乎没有正确地对文件进行排序:
ls -altR . | head -n 3
如何在目录(包括子目录)中找到最近修改的文件?
当前回答
我发现上面的命令很有用,但对于我的情况,我需要查看文件的日期和时间,我有一个问题,几个文件的名称中有空格。 这是我的工作解决方案。
find . -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" " | sed 's/.*/"&"/' | xargs ls -l
其他回答
我发现以下内容更简短,输出可解释性更强:
find . -type f -printf '%TF %TT %p\n' | sort | tail -1
给定标准化ISO格式datetimes的固定长度,字典排序就可以了,我们不需要在排序上使用-n选项。
如果你想再次删除时间戳,你可以使用:
find . -type f -printf '%TFT%TT %p\n' | sort | tail -1 | cut -f2- -d' '
查询/target_directory目录下的所有子目录下,在过去60分钟内被修改过的文件。
$ find /target_directory -type f -mmin -60
要查找最近修改的文件,按更新时间的相反顺序排序(即,最近更新的文件在前面):
$ find /etc -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort -r
这似乎工作得很好,即使是子目录:
find . -type f | xargs ls -ltr | tail -n 1
如果文件太多,细化查找。
如果在每个文件上单独运行stat会变慢,你可以使用xargs来加快速度:
find . -type f -print0 | xargs -0 stat -f "%m %N" | sort -n | tail -1 | cut -f2- -d" "
这个简单的cli也可以工作:
ls -1t | head -1
您可以将-1更改为您想要列出的文件数量