bash - 获取特定文件的mtime?

Ind*_*ial 30 bash shell

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

T.J*_*der 58

stat 可以给你这个信息:

filemtime=`stat -c %Y myfile.txt`
Run Code Online (Sandbox Code Playgroud)

%Y给你最后的修改为"自大纪元以来的秒数",但还有很多其他的选择; 更多信息.因此,如果该文件在2011-01-22格林威治标准时间15:30进行了修改,则上述内容将返回1295710237区域内的数字.

编辑:啊,你想要自修改以来的几天时间.这将更复杂,尤其是因为"一天"不是固定的时间段(一些"天"只有23小时,其他25天 - 由于夏令时).

天真的版本可能是这样的:

filemtime=`stat -c %Y $1`
currtime=`date +%s`
diff=$(( (currtime - filemtime) / 86400 ))
echo $diff
Run Code Online (Sandbox Code Playgroud)

......但是,假设一天总是完全是86,400秒.

更多关于bash算术的信息.

  • 警告:`stat`选项在整个系统中都不是可移植的.例如,FreeBSD需要`stat -f%m`来做同样的事情(argh!).POSIX中未定义`stat`实用程序. (6认同)

De *_*ica 8

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

date -r file "+%F"
# 2021-01-12
file_mtime=$(date -r file "+%F")
Run Code Online (Sandbox Code Playgroud)

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

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

"+%j": day of year
"+%s": unix epoch time
Run Code Online (Sandbox Code Playgroud)

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