如何递归列出文件并按修改时间排序?

如何递归列出文件并按修改时间排序?

如何递归列出目录下的所有文件并按修改时间对输出进行排序?

我通常使用,ls -lhtc但它不会递归查找所有文件。我使用的是 Linux 和 Mac。

ls -l在 Mac OS X 上可以

-rw-r--r--    1 fsr  user      1928 Mar  1  2011 foo.c
-rwx------    1 fsr  user      3509 Feb 25 14:34 bar.c

日期部分不一致或不一致,因此解决方案必须考虑到这一点。

部分解决方案

stat -f "%m%t%Sm %N" ./* | sort -rn | head -3 | cut -f2-

有效,但不是递归的。

答案1

stat以下是@johnshen64 建议的方法

find . -type f -exec stat -f "%m%t%Sm %N" '{}' \; | sort -rn | head -20 | cut -f2-

答案2

使用find并按-printf合理的日期格式排序:

find -type f -printf '%T+\t%p\n' | sort -n

这应该可以最大限度地减少进程分叉,从而达到最快的速度。

如果您不喜欢秒的小数部分(通常文件系统中不会实现),请参见以下示例:

find -type f -printf '%T+\t%p\n' | sed 's/\.[[:digit:]]\{10\}//' | sort -n
find -type f -printf '%T+\t%p\n' | cut --complement -c 20-30 | sort -n

编辑:Mac 的标准配置find没有-printf。但这并不难在 Mac 上安装 GNU find(另请参阅该链接了解有关 Mac/Linux 兼容性和的更多注意事项xargs)。

答案3

find .应该能够获取所有文件。如下所示:

find . -exec ls -dl '{}' \; | sort -k 6,7

您需要根据您的需要进行调整。

答案4

在我的 Linux 上,需要进行一些小的调整,stat因为coreutils

find . -type f -exec stat -c "%y %N" "{}" \;

要查找最近的 20 个文件,请排序撤销按修改时间排序:

find . -type f -exec stat -c "%y %N" "{}" \; | sort -rn | head -20 | cut -f2-

stat手动的)文档:

%y - Time of last modification
%Y - Time of last modification as seconds since Epoch
%n - File name
%N - Quoted file name with dereference if symbolic link

相关内容