文件多大了?

时间:2016-01-12 06:29:35

标签: unix

我有一个shell脚本会检查一个文件是多少天。我做了stat -f "%m%t%Sm %N" "$file"。但是我想将它存储到变量中,然后比较当前时间和文件创建时间?

1 个答案:

答案 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格式说明符来表示文件的诞生,但这并不总是有效(它返回零)。如果您对创建文件的时间非常感兴趣而不是上次更新,那么可以先检查一下,但您可能必须准备好接受信息不可用的可能性。我上次使用了上次修改时间,因为它常常用于检测更改等内容。