stat -c "%y" file 输出文件修改时间(mtime)的 unix 时间戳(秒级整数),可直接用于脚本比较;其他常用字段包括 %x(atime)、%z(ctime)、%y(可读时间字符串)等。

Linux 中 stat 命令本身不支持直接用 -c "%Y" 输出 Unix 时间戳(秒级),但可以做到——关键在于理解 %Y 的含义和正确使用格式。
✅ %Y 确实输出 Unix 时间戳(秒)
stat -c "%Y" file 返回的是该文件**修改时间(mtime)对应的 Unix 时间戳(自 1970-01-01 00:00:00 UTC 起的秒数)**,不是字符串或日期格式。这是可直接用于比较、计算或触发同步的纯数字。
例如:
→ stat -c "%Y" /tmp/test.txt1717023456
? 实际脚本中怎么用?
在自动化同步脚本(如配合 rsync、inotifywait 或定时检查)中,常用方式是:
- 获取目标文件的当前 mtime 时间戳:
cur_ts=$(stat -c "%Y" "$file") - 与上一次记录的时间戳比对(如存在
.last_sync文件):if [ "$cur_ts" -gt "$last_ts" ] - 触发同步后,更新记录:
echo "$cur_ts" > .last_sync
⚠️ 注意:%Y 是整数秒,无小数;若需纳秒级精度(如判断同一秒内多次修改),可用 %y(输出完整日期字符串)或 %N(纳秒部分),但多数同步场景秒级已足够。
? 其他实用时间字段(按需选用)
除了 %Y(mtime 秒数),常见还有:
-
%X:访问时间(atime)Unix 时间戳(秒) -
%Z:状态变更时间(ctime)Unix 时间戳(秒) -
%y:mtime 完整可读时间字符串(如2024-05-30 14:57:36.123456789 +0800) -
%w和%W:对应 birth time(创建时间),但多数 ext4/xfs 不可靠,慎用
⚠️ 常见问题提醒
遇到报错或返回空,检查以下几点:
- 确保文件存在且有读取权限:
stat -c "%Y" file 2>/dev/null加错误抑制更健壮 - 不同系统
stat语法略有差异:GNU(Linux)用-c,BSD/macOS 用-f,脚本跨平台需适配 - 避免用
%y后再转时间戳(如date -d "$(stat -c "%y" f)" +%s),多此一举且易因时区出错











