在进行递归调用时,ls似乎没有正确地对文件进行排序:

ls -altR . | head -n 3

如何在目录(包括子目录)中找到最近修改的文件?


当前回答

这给出了一个排序的列表:

find . -type f -ls 2>/dev/null | sort -M -k8,10 | head -n5

通过在sort命令中添加'-r'来颠倒顺序。如果你只想要文件名,在'| head'之前插入"awk '{print $11}' |"

其他回答

下面的命令在Solaris上运行:

find . -name "*zip" -type f | xargs ls -ltr | tail -1 

如果在每个文件上单独运行stat会变慢,你可以使用xargs来加快速度:

find . -type f -print0 | xargs -0 stat -f "%m %N" | sort -n | tail -1 | cut -f2- -d" " 

这将递归地将当前目录中所有目录的修改时间更改为每个目录中的最新文件:

for dir in */; do find $dir -type f -printf '%T@ "%p"\n' | sort -n | tail -1 | cut -f2- -d" " | xargs -I {} touch -r {} $dir; done

这个简单的cli也可以工作:

ls -1t | head -1

您可以将-1更改为您想要列出的文件数量

我更喜欢这个,它更短:

find . -type f -print0|xargs -0 ls -drt|tail -n 1