查找目录树中最新 500 个文件的命令,并且符合 POSIX 标准

查找目录树中最新 500 个文件的命令,并且符合 POSIX 标准

我正在寻找单行 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)作为字段分隔符。\tsortcut\t

要符合 POSIX 标准,您可以替换

$'...\t...'

"...<press Ctrl-V, Tab>..."

不幸的是,stat它不便携。 Linux 使用,stat -c "%Y"但 FreeBSD 和 Mac OS 使用stat -f "%m"

如果您确实想要一种可移植的方法,那么使用 Python、Perl 或 Ruby 会更容易。

相关内容