我很清楚能够find myfile.txt -mtime +5
检查我的文件是否超过5天。但是我想在myfile.txt的几天内获取mtime并将其存储到变量中以供进一步使用。我该怎么做?
答案 0 :(得分:56)
stat
可以为您提供以下信息:
filemtime=`stat -c %Y myfile.txt`
%Y
给你最后修改为“自大纪元以来的秒数”,但还有很多其他选项; more info。因此,如果该文件在2011-01-22格林尼治标准时间15:30进行了修改,则上述内容将返回1295710237区域内的数字。
编辑:啊,您想要自修改以来的几天内的时间。这将更复杂,尤其是因为“一天”不是固定的时间段(一些“天”只有23小时,其他25天 - 由于夏令时)。
天真版本可能如下所示:
filemtime=`stat -c %Y $1`
currtime=`date +%s`
diff=$(( (currtime - filemtime) / 86400 ))
echo $diff
......但是,假设一天总是完全是86,400秒。
有关bash here中算术的更多信息。
答案 1 :(得分:4)
日期实用程序有一个方便的开关,用于从文件中提取 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 中有点麻烦,所以如果您需要在所有极端情况下都适用的相对时间,那么使用另一种语言可能会更好。
答案 2 :(得分:3)
AGE=$(perl -e 'print -M $ARGV[0]' $file)
将$ AGE设置为$ file的年龄,因为Perl的-M
运算符处理stat
调用以及为您转换为天数。
返回值是浮点值(例如,6.62849537天)。如果需要整数结果,请在表达式中添加int
AGE=$(perl -e 'print int -M $ARGV[0]' $file)
Ruby和Python也有他们的单行来统计文件并返回一些数据,但我相信Perl有最简洁的方法。
答案 3 :(得分:2)
我这是答案吗?
A=$(stat -c "%y" myfile.txt)
查看stat-help
stat --help
Usage: stat [OPTION]... FILE...
Display file or file system status.
[...]
-c --format=FORMAT use the specified FORMAT instead of the default;
output a newline after each use of FORMAT
[...]
The valid format sequences for files
[...]
%y Time of last modification, human-readable
%Y Time of last modification, seconds since Epoch
[...]