我有一个shell脚本会检查一个文件是多少天。我做了stat -f "%m%t%Sm %N" "$file"
。但是我想将它存储到变量中,然后比较当前时间和文件创建时间?
答案 0 :(得分:1)
假设您正在使用bash
,您可以使用以下内容捕获命令的输出:
fdate=$(stat -f "%m%t%Sm %N" "$file")
然后根据结果做任何事情:
echo ${fdate}
假设命令本身首先起作用。如果是,您可以忽略下面的文字。
GNU stat
程序使用-f
来指定您要查询文件系统而不是文件,而其他选项在您的问题上下文中似乎没有意义
使用Gnu stat
,您可以获得自上次文件更新(1)以来的时间:
ageInSeconds=$(($(date -u +%s) - $(stat --printf "%Y" "file")))
从当前时间减去文件的最后修改时间(均表示为自纪元以来的秒数),以秒为单位给出年龄。
要把它变成几天,假设你并不过分担心闰秒可能出现的错误(大多数情况下的错误,一部分约为1570万,或0.000006% ),你可以把它除以86,400:
ageInDays=$((($(date -u +%s) - $(stat --printf "%Y" "file")) / 86400))
(1)请注意,虽然stat
声称有一个%W
格式说明符来表示文件的诞生,但这并不总是有效(它返回零)。如果您对创建文件的时间非常感兴趣而不是上次更新,那么可以先检查一下,但您可能必须准备好接受信息不可用的可能性。我上次使用了上次修改时间,因为它常常用于检测更改等内容。