【发布时间】:2020-12-11 21:20:41
【问题描述】:
我想使用 GNU find 命令根据模式查找文件,然后按照最近修改文件到最近修改最少的顺序显示它们。
我明白这一点:
find / -type f -name '*.md'
但是要添加什么来将文件从最近修改到最少?
【问题讨论】:
标签: linux bash unix gnu gnu-findutils
我想使用 GNU find 命令根据模式查找文件,然后按照最近修改文件到最近修改最少的顺序显示它们。
我明白这一点:
find / -type f -name '*.md'
但是要添加什么来将文件从最近修改到最少?
【问题讨论】:
标签: linux bash unix gnu gnu-findutils
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 以将文件列表显示为单独的行。
【讨论】:
find <dir> -name "*.mz" -printf "%Ts - %h/%f\n" | sort -rn
以纪元格式 (%Ts) 以及目录 (%h) 和文件名 (%f) 打印修改时间。将其通过管道传递给 sort -rn 以倒序排序。
【讨论】:
将find 的输出通过管道传输到xargs 和ls:
find / -type f -name '*.md' | xargs ls -1t
【讨论】:
find ... -exec ls 1t {} + 而不是xargs。 -exec + 不仅速度更快,还避免了很多引用问题。