如何递归列出目录下的所有文件并按修改时间对输出进行排序?
我通常使用,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
Run Code Online (Sandbox Code Playgroud)
日期部分不一致或对齐的地方,因此解决方案必须考虑到这一点。
stat -f "%m%t%Sm %N" ./* | sort -rn | head -3 | cut -f2-
Run Code Online (Sandbox Code Playgroud)
有效,但不是递归的。
Dan*_*son 14
使用find
's-printf
并按合理的日期格式排序:
find -type f -printf '%T+\t%p\n' | sort -n
Run Code Online (Sandbox Code Playgroud)
这应该最小化进程分叉,因此是最快的。
如果您不喜欢小数第二部分的示例(无论如何通常不会在文件系统中实现):
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
Run Code Online (Sandbox Code Playgroud)
编辑:find
Mac 上的标准没有-printf
. 但是在 Mac上安装 GNU find并不困难(有关 Mac/Linux 兼容性的更多注意事项,另请参阅该链接xargs
)。
stat
这是使用@johnshen64 建议的方法
find . -type f -exec stat -f "%m%t%Sm %N" '{}' \; | sort -rn | head -20 | cut -f2-
Run Code Online (Sandbox Code Playgroud)