stat -c %y 获取文件修改时间的 unix 时间戳(秒级),输出纯数字如1717024589,可用于数值比较、算术运算或传入date等命令;需注意其为gnu语法,bsd/macos应使用stat -f %m。

直接用 stat -c %Y 可以获取文件的 Unix 时间戳(即自 1970-01-01 00:00:00 UTC 起的秒数),但要注意它返回的是修改时间(mtime),且默认输出带换行、无小数——这对脚本分支判断足够简洁可靠。
确认 stat 命令语法与输出格式
stat -c %Y 是 GNU coreutils 的写法(Linux 常用),BSD/macOS 需用 stat -f %m。输出为纯数字,例如:
该值可直接参与数值比较、算术运算或传入其他命令(如 date -d @1717024589 查看可读时间)。
在 Shell 脚本中安全捕获并用于条件分支
推荐用命令替换赋值,并检查是否为空或报错(如文件不存在):
ts=$(stat -c %Y "/path/to/file" 2>/dev/null)if [[ -z "$ts" ]] || ! [[ "$ts" =~ ^[0-9]+$ ]]; then echo "无效文件或权限不足"; exit 1; fi- 后续可用:
if (( ts > 1717020000 )); then ... fi(整数比较,无需调用 date)
配合 rsync 或 inotify 实现精准同步触发
例如:只在文件修改时间晚于某基准时间戳时执行同步:
- 记录上次同步时间戳到临时文件:
stat -c %Y last_sync_target > /tmp/last_sync_ts - 判断源文件是否更新:
src_ts=$(stat -c %Y source.txt); ref_ts=$(cat /tmp/last_sync_ts); if (( src_ts > ref_ts )); then rsync source.txt dest/; stat -c %Y source.txt > /tmp/last_sync_ts; fi - 注意:若需纳秒级精度,改用
%y(输出含小数,需截断或用awk处理),但多数同步场景秒级已足够
避免常见陷阱
stat -c %Y 返回的是 mtime,不是 ctime(状态变更时间)或 atime(访问时间)。若脚本依赖“文件内容是否真正变化”,应优先用 mtime;若需检测元数据改动(如权限变更),才考虑 ctime(stat -c %Z)。另外,NFS 或某些虚拟文件系统可能因缓存导致 mtime 滞后,建议在关键路径加 sync 或使用 find -newermt 辅助校验。











