Linux 使用Bash获取特定文件的mtime?
我很清楚能够执行Linux 使用Bash获取特定文件的mtime?,linux,bash,shell,Linux,Bash,Shell,我很清楚能够执行find myfile.txt-mtime+5检查我的文件是否超过5天。然而,我想获取myfile.txt中的mtime,并将其存储到一个变量中以供进一步使用。我该怎么做呢?stat可以为您提供以下信息: filemtime=`stat -c %Y myfile.txt` %Y最后一次修改为“从纪元开始的秒数”,但还有很多其他选项。因此,如果文件在2011年1月22日格林威治标准时间15:30被修改,上面的数字将返回1295710237 编辑:啊,您想要修改后的时间(以天为单位
find myfile.txt-mtime+5
检查我的文件是否超过5天。然而,我想获取myfile.txt中的mtime,并将其存储到一个变量中以供进一步使用。我该怎么做呢?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
…但同样,这是假设一天总是正好86400秒长
更多关于bash中算术的信息。我知道答案了吗
A=$(stat -c "%y" myfile.txt)
看看统计帮助
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
[...]
当Perl的-M
操作符为您处理stat
调用和到天数的转换时,将$AGE设置为$file的天数
返回值是一个浮点值(例如,6.62849537天)。如果需要整数结果,请在表达式中添加int
AGE=$(perl -e 'print int -M $ARGV[0]' $file)
Ruby和Python也有自己的一行程序来统计文件并返回一些数据,但我相信Perl有最简洁的方法。日期实用程序有一个方便的开关,用于从文件中提取mtime,然后可以使用格式字符串显示或存储
date -r file "+%F"
# 2021-01-12
file_mtime=$(date -r file "+%F")
请参见人工日期
,日期的输出由以“+”开头的格式字符串控制
用于比较多个日期的有用格式字符串可能包括:
"+%j": day of year
"+%s": unix epoch time
带日期的算术在bash中有点麻烦,因此如果您需要在所有情况下都适用的相对时间,您最好使用另一种语言。这很好,不幸的是,我愚弄了自己,忘记了我需要以天为单位的mtime年龄。这可能吗?@Industrial:一旦你有了价值,你就可以对它进行数学运算。我不明白你所说的“…以天为单位的mtime年龄”是什么意思。(从什么时候开始几天?你的意思是,多少天前它被修改了?@TJ Crowder:谢谢。我的意思是,澄清一下,我需要的是文件被删除后的天数modified@Industrial:明白了。更新。警告:stat
选项在所有系统中都不可移植。例如,FreeBSD需要stat-f%m
来完成相同的任务(啊!)。POSIX中未定义stat
实用程序。
"+%j": day of year
"+%s": unix epoch time