在进行递归调用时,ls似乎没有正确地对文件进行排序:
ls -altR . | head -n 3
如何在目录(包括子目录)中找到最近修改的文件?
在进行递归调用时,ls似乎没有正确地对文件进行排序:
ls -altR . | head -n 3
如何在目录(包括子目录)中找到最近修改的文件?
当前回答
这似乎工作得很好,即使是子目录:
find . -type f | xargs ls -ltr | tail -n 1
如果文件太多,细化查找。
其他回答
find . -type f -printf '%T@ %p\n' \
| sort -n | tail -1 | cut -f2- -d" "
对于一棵巨大的树,排序可能很难把所有东西都保存在内存中。
%T@像unix时间戳一样给出修改时间,sort -n按数字排序,tail -1取最后一行(最高时间戳),cut -f2 -d" "从输出中删除第一个字段(时间戳)。
编辑:就像-printf可能只在gnu中使用一样,ajreal中stat -c的使用也是如此。虽然在BSD上也可以做同样的事情,但格式化的选项是不同的(-f "%m %N"似乎是这样)
我错过了复数的部分;如果你想要更多的最新文件,只需要增加tail参数。
我更喜欢这个,它更短:
find . -type f -print0|xargs -0 ls -drt|tail -n 1
这似乎工作得很好,即使是子目录:
find . -type f | xargs ls -ltr | tail -n 1
如果文件太多,细化查找。
这给出了一个排序的列表:
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