使用 Bash 获取特定文件的 mtime?

新手上路,请多包涵

我很清楚能够做 find myfile.txt -mtime +5 检查我的文件是否超过 5 天。但是,我想在 myfile.txt 的天数内获取 mtime 并将其存储到变量中以供进一步使用。我该怎么做?

原文由 Industrial 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 734
2 个回答

stat 可以给你信息:

 filemtime=$(stat -c %Y myfile.txt)

%Y 将最后一次修改为“自大纪元以来的秒数”,但还有很多其他选项; 更多信息。因此,如果文件在 2011 年 1 月 22 日格林威治标准时间 15:30 进行了修改,则上述内容将返回 1295710237 区域内的数字。

编辑:啊,你想要修改后的天数。这将变得更加复杂,尤其是因为“一天”不是固定的时间段(有些“天”只有 23 小时,而其他“天”只有 25 小时——这要归功于夏令时)。

天真 的版本可能如下所示:

 filemtime=$(stat -c %Y "$1")
currtime=$(date +%s)
diff=$(( (currtime - filemtime) / 86400 ))
echo $diff

…但同样,这是假设一天总是正好 86,400 秒长。

更多关于 bash 中的算术的 信息

原文由 T.J. Crowder 发布,翻译遵循 CC BY-SA 4.0 许可协议

date 实用程序有一个方便的开关,用于从文件中提取 mtime,然后您可以使用格式字符串显示或存储该文件。

 date -r file "+%F"
# 2021-01-12
file_mtime=$(date -r file "+%F")

参见 man date ,日期的输出由以 "+" 开头的格式字符串控制

用于比较多个日期的有用格式字符串可能包括:

 "+%j": day of year
"+%s": unix epoch time

日期算术在 bash 中有点麻烦,所以如果您需要在所有极端情况下都可以使用的相对时间,那么使用另一种语言可能会更好。

原文由 De Novo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题