我正在寻找单行 shell 脚本或 unix 命令来查找目录中最新的 500 个文件。主要限制是它应该符合 POSIX 标准并且目录可以包含大量文件。
答案1
我非常确定您需要统计目录中的每个文件,以确定哪些是最新的 500 个文件。
ls -t
| head -n 500
答案2
如果您指的是目录及其所有子目录中的文件,例如
find . -exec sh -c \
$'echo "$(stat -c "%Y" "$0")\t$0"' {} \; | \
sort -k1nr | cut -f 2 | head -n 500
应该可以解决问题。
分解一下:
find . -exec
对当前目录下的每个文件运行命令sh -c "command" {}
command
为每个看到的文件运行find
,并$0
设置为文件名stat -c "+%Y" "$0"
打印指定文件的修改时间"$0"
sort -k1nr
根据第一个字段以相反的数字顺序排序cut -f 2
去掉修改时间字段,只留下文件名head -n 500
最多打印前 500 行
and是因为使用and ($'...'
即TAB)作为字段分隔符。\t
sort
cut
\t
要符合 POSIX 标准,您可以替换
$'...\t...'
和
"...<press Ctrl-V, Tab>..."
不幸的是,stat
它不便携。 Linux 使用,stat -c "%Y"
但 FreeBSD 和 Mac OS 使用stat -f "%m"
。
如果您确实想要一种可移植的方法,那么使用 Python、Perl 或 Ruby 会更容易。