You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在BASH中使用stat -c '%n%Y'按最后修改时间排序文件?

嘿,我来帮你搞定这个问题!你现在的思路方向是对的,但问题出在stat的输出格式上——文件名和时间戳直接拼接在一起,sort没办法识别出后面的时间数字来排序。咱们分两种方法解决,一种是更可靠的推荐方案,另一种是适配你原来拼接格式的方法:

推荐方案:给stat输出加分隔符(最简单可靠)

首先修改stat的输出格式,让文件名和时间戳用空格分开,这样sort就能轻松按时间列排序了:

stat -c "%n %Y" <directory_path>* | sort -k2n
  • 细节解释:
    • %n %Y:%n输出文件名,%Y输出Unix时间戳(从1970年至今的秒数),用空格分隔两者,每行输出类似myfile.txt 1690000000。
    • sort -k2n:-k2指定按第二列排序,-n表示按数字大小排序(而不是字符串字典序)。
    • 如果想要从新到旧排序,加上-r参数:sort -k2nr。
适配原拼接格式的方法(不推荐,但满足需求)

如果你一定要用%n%Y的拼接输出,那得先提取末尾的10位时间戳(Unix时间戳通常是10位),再排序:

stat -c "%n%Y" <directory_path>* | awk '{ts=substr($0, length($0)-9, 10); print ts, $0}' | sort -n | cut -d' ' -f2-
  • 细节解释:
    • awk部分:提取每行最后10个字符作为时间戳,把时间戳放在行首,输出类似1690000000 myfile.txt1690000000。
    • sort -n:按行首的时间戳数字排序。
    • cut -d' ' -f2-:去掉行首的时间戳,还原成你原来的拼接格式。

为什么不推荐这个方法?因为如果你的文件名末尾本身包含数字,或者系统返回的时间戳不是10位(虽然极少发生),这个提取逻辑就会出错。所以优先用第一个方案更稳妥。

内容的提问来源于stack exchange,提问作者Juan Ortega

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:49:14