如何检查bash文件是否超过x时间创build?
我想在linux bash中检查一个文件是否超过x时间创build的。
假设文件名为text.txt,时间为2小时。
if [ what? ] then echo print "old enough" fi
只适用于修改时间
if test `find "text.txt" -mmin +120` then echo old enough fi
或者,在一行中也是一样的:
#!/bin/bash find text.txt -mmin +120 -exec echo "old enough" \;
您可以使用-cmin
进行更改,或使用-amin
进行访问。 正如其他人指出,我不认为你可以跟踪创作时间。
我总是喜欢用date -r /the/file +%s
来查找它的年龄。
你也可以touch --date '2015-10-10 9:55' /tmp/file
来获得任意date/时间的非常精细的时间。
创build时间不存储。
存储的是三个时间戳(通常,可以在某些文件系统上或通过某些文件系统选项closures):
- 上次访问时间
- 上次修改时间
- 上次更改时间
对文件的“更改”被视为权限更改,重命名等,而修改仅为内容。
尽pipectime在技术上并不是创build的时间,但通常是这样。
由于ctime不受文件内容更改的影响,通常只有在创build文件时才会更新。 是的 – 我可以听到你所有尖叫 – 如果你改变访问权限或所有权,它也会被更新…但通常这是一次,通常是在你把文件放在那里。
就个人而言,我总是使用mtime来处理所有事情,而且我想象的是你想要的。 但无论如何…这是一个Guss的“不吸引人的”bash,在一个易于使用的functionrehash。
#!/斌/庆典 函数age(){ 本地文件名= $ 1 local changed =`stat -c%Y“$ filename”` 本地现在=`date+%s` 本地过去了 让elapsed = now改变 echo $ elapsed } 文件= “/” echo $文件的年龄是$(age“$ file”)秒。
使用stat
来计算文件的最后修改date, date
出当前时间和自由使用bashisms,可以根据文件的最后修改时间1来做testing。
if [ "$(( $(date +"%s") - $(stat -c "%Y" $somefile) ))" -gt "7200" ]; then echo "$somefile is older then 2 hours" fi
虽然代码的可读性稍差一点,但是我认为它是一个更好的方法,然后运行find
来查看已经“find”的文件。 另外,date操作很有趣;-)
- 正如菲尔正确地指出创build时间不logging,但使用
%Z
而不是下面的%Y
来获得“更改时间”,这可能是你想要的。
[更新]
对于mac用户,使用stat -f "%m" $somefile
而不是上面的Linux特定语法
find一个是好的,但我认为你可以用另一种方式,尤其是如果你现在需要多less秒的文件旧的
date -d "now - $( stat -c "%Y" $filename ) seconds" +%s
使用GNUdate
考虑工具“统计”的结果:
File: `infolog.txt' Size: 694 Blocks: 8 IO Block: 4096 regular file Device: 801h/2049d Inode: 11635578 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ fdr) Gid: ( 1000/ fdr) Access: 2009-01-01 22:04:15.000000000 -0800 Modify: 2009-01-01 22:05:05.000000000 -0800 Change: 2009-01-01 22:05:05.000000000 -0800
您可以在这里看到访问/修改/更改的三个date。 没有创builddate。 只能确定文件内容何时被修改(“修改”字段)或其inode已更改(“更改”字段)。
两个字段都更新时的示例:
如果有人将额外的信息连接到文件的末尾,“修改”将被更新。
如果有人通过chmod更改权限,“更改”将被更新。