【问题标题】:How to use GNU find command to find files by pattern and list files in order of most recent modification to least?如何使用 GNU find 命令按模式查找文件并按最近修改到最少的顺序列出文件?
【发布时间】:2020-12-11 21:20:41
【问题描述】:

我想使用 GNU find 命令根据模式查找文件,然后按照最近修改文件到最近修改最少的顺序显示它们。

我明白这一点:

find / -type f -name '*.md'

但是要添加什么来将文件从最近修改到最少?


【问题讨论】:

    标签: linux bash unix gnu gnu-findutils


    【解决方案1】:

    find不能对文件进行排序,所以可以改为输出修改时间加文件名,按修改时间排序,然后再去掉修改时间:

    find . -type f -name '*.md' -printf '%T@ %p\0' |   # Print time+name
      sort -rnz |                                      # Sort numerically, descending
      cut -z -d ' ' -f 2- |                            # Remove time
      tr '\0' '\n'                                     # Optional: make human readable
    

    这使用\0 分隔的条目以避免任何类型的文件名出现问题。您可以直接安全地将其传递给许多工具,但在这里它改为通过管道传递给tr 以将文件列表显示为单独的行。

    【讨论】:

      【解决方案2】:
      find <dir> -name "*.mz" -printf "%Ts - %h/%f\n" | sort -rn
      

      以纪元格式 (%Ts) 以及目录 (%h) 和文件名 (%f) 打印修改时间。将其通过管道传递给 sort -rn 以倒序排序。

      【讨论】:

        【解决方案3】:

        find 的输出通过管道传输到xargsls

        find / -type f -name '*.md' | xargs ls -1t
        

        【讨论】:

        • 我会推荐find ... -exec ls 1t {} + 而不是xargs-exec + 不仅速度更快,还避免了很多引用问题。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-11
        • 2016-01-29
        • 2011-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多