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