按修改日期查找和排序文件

问题描述 投票:0回答:2

我知道这个问题网上有很多答案。但是,我想知道这个替代解决方案是否有效:

ls -lt `find . -name "*.jpg" -print | head -10`

我当然知道这只会给我前 10 个结果。我问的原因是因为我不确定

ls
是否针对
find
的每个结果单独执行。谢谢

linux find ls
2个回答
0
投票

在 Linux 上,stat 命令需要的格式参数略有不同。这是修改后的命令:

找到。 -type f -print0 | xargs -0 stat -c"%Y %y %N" | xargs -0 stat -c"%Y %y %N" |排序-rn |头-n 1

此表单将仅返回路径名:

找到。 -type f -print0 | xargs -0 stat -c"%Y %y %n" | xargs -0 stat -c"%Y %y %n" | xargs -0 stat -c"%Y %y %n"排序-rn |头 -n 1 | awk '{print $5}'


-1
投票

在您的解决方案中:

  • ls
    将在
    find
    评估后执行
  • find
    可能会产生太多结果,导致
    ls
    无法处理,在这种情况下,您可能需要查看
    xargs
    命令

这应该效果更好:(格式适用于 MacOS)

  find . -type f -print0 | xargs -0 stat -f"%m %Sm %N" | sort -rn 

命令的三个部分为此:

  • 找到所有文件并打印它们的路径
  • 使用
    xargs
    处理(长)文件列表并打印出每个文件的修改 unixtime、人类可读时间和文件名
  • 按相反的数字顺序对结果列表进行排序

主要技巧是将文件最后一次修改时的unixtime数字添加到行的开头,然后对它们进行排序。

© www.soinside.com 2019 - 2024. All rights reserved.