在进行递归调用时,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" "
对于一棵巨大的树,排序可能很难把所有东西都保存在内存中。
%T@像unix时间戳一样给出修改时间,sort -n按数字排序,tail -1取最后一行(最高时间戳),cut -f2 -d" "从输出中删除第一个字段(时间戳)。
编辑:就像-printf可能只在gnu中使用一样,ajreal中stat -c的使用也是如此。虽然在BSD上也可以做同样的事情,但格式化的选项是不同的(-f "%m %N"似乎是这样)
我错过了复数的部分;如果你想要更多的最新文件,只需要增加tail参数。
其他回答
这给出了一个排序的列表:
find . -type f -ls 2>/dev/null | sort -M -k8,10 | head -n5
通过在sort命令中添加'-r'来颠倒顺序。如果你只想要文件名,在'| head'之前插入"awk '{print $11}' |"
我发现上面的命令很有用,但对于我的情况,我需要查看文件的日期和时间,我有一个问题,几个文件的名称中有空格。 这是我的工作解决方案。
find . -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" " | sed 's/.*/"&"/' | xargs ls -l
显示带有人类可读时间戳的最新文件:
find . -type f -printf '%TY-%Tm-%Td %TH:%TM: %Tz %p\n'| sort -n | tail -n1
结果如下所示:
2015-10-06 11:30: +0200 ./foo/bar.txt
若要显示更多文件,请将-n1替换为更高的数字
接着@plundra的回答,下面是BSD和OS X版本:
find . -type f -print0 \
| xargs -0 stat -f "%m %N" \
| sort -rn | head -1 | cut -f2- -d" "
这个简单的cli也可以工作:
ls -1t | head -1
您可以将-1更改为您想要列出的文件数量