我想在Linux bash中检查一个文件是否是在超过x次之前创建的。假设文件名为text.txt,时间为2小时。
if [ what? ] then echo "old enough" fi
字符串
8wigbo561#
仅适用于修改时间
if test `find "text.txt" -mmin +120` then echo old enough fi
字符串你可以用-cmin来表示修改,或者用-amin来表示访问时间。正如其他人指出的,我认为你不能跟踪创建时间。
-cmin
-amin
66bbxpm52#
我一直喜欢用date -r /the/file +%s来计算它的年龄。您还可以执行touch --date '2015-10-10 9:55' /tmp/file以获得任意日期/时间的极细粒度时间。
date -r /the/file +%s
touch --date '2015-10-10 9:55' /tmp/file
xj3cbfub3#
使用stat来计算文件的最后修改日期,date来计算当前时间,并自由使用语法,人们可以根据文件的最后修改时间进行您想要的测试1。
stat
date
if [ "$(( $(date +"%s") - $(stat -c "%Y" "$somefile") ))" -gt "7200" ]; then echo "'$somefile' is older then 2 hours" fi
字符串虽然代码的可读性比find方法稍差,但我认为这是一种比运行find来查看您已经“找到”的文件更好的方法。1.正如Phil正确指出的,创建时间没有记录,但是使用%Z而不是下面的%Y来获得“更改时间”,这可能是你想要的。
find
%Z
%Y
[更新]
对于mac用户,请使用stat -f "%m" "$somefile",而不是上面特定于Linux的语法
stat -f "%m" "$somefile"
sxpgvts34#
创建时间不存储。存储的是三个时间戳(通常,它们可以在某些文件系统上或通过某些文件系统选项关闭):
对文件的“更改”被计为权限更改、重命名等。而修改仅为内容。
np8igboo5#
虽然ctime不是技术上的创造时间,但它通常是。由于ctime不受文件内容变化的影响,它通常只在文件创建时更新。是的-我能听到你们的尖叫-如果你改变访问权限或所有权,它也会更新.但通常这是一次完成的事情,通常在你把文件放在那里的同时。就我个人而言,我总是用mtime来做任何事情,我想这就是你想要的。但是无论如何..
#!/bin/bash function age() { local filename=$1 local changed=`stat -c %Y "$filename"` local now=`date +%s` local elapsed let elapsed=now-changed echo $elapsed } file="/" echo The age of $file is $(age "$file") seconds.
tp5buhyn6#
查找一个是好的,但我认为你可以使用另一种方式,特别是如果你需要现在有多少秒的文件旧第一个月使用GNU日期
vi4fp9gy7#
考虑工具“stat”的结果:
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
字符串你可以在这里看到访问/修改/更改的三个日期。没有创建日期。你只能真正确定文件内容被修改(“修改”字段)或其inode被更改(“更改”字段)。当两个字段都更新时的示例:如果有人将额外的信息连接到文件的末尾,“修改”将被更新。如果有人通过chmod更改了权限,“更改”将被更新。
nkkqxpd98#
我用
file_age() { local filename=$1 echo $(( $(date +%s) - $(date -r $filename +%s) )) } is_stale() { local filename=$1 local max_minutes=20 [ $(file_age $filename) -gt $(( $max_minutes*60 )) ] } if is_stale /my/file; then ... fi
ia2d9nvy9#
从coreutils 8.31、glibc 2.28和内核版本4.11或更新版本开始,stat返回文件的创建日期。
file_creation_date=`stat -c '%w' text.txt`
字符串我们找回两小时前的时间
two_hours_ago=`date -u +"%F %T" -d '2 hours ago'`
型我们比较了这两个日期
if [[ $file_creation_date > $two_hours_ago ]]; then echo "older" fi
型
9条答案
按热度按时间8wigbo561#
仅适用于修改时间
字符串
你可以用
-cmin
来表示修改,或者用-amin
来表示访问时间。正如其他人指出的,我认为你不能跟踪创建时间。66bbxpm52#
我一直喜欢用
date -r /the/file +%s
来计算它的年龄。您还可以执行
touch --date '2015-10-10 9:55' /tmp/file
以获得任意日期/时间的极细粒度时间。xj3cbfub3#
使用
stat
来计算文件的最后修改日期,date
来计算当前时间,并自由使用语法,人们可以根据文件的最后修改时间进行您想要的测试1。字符串
虽然代码的可读性比
find
方法稍差,但我认为这是一种比运行find
来查看您已经“找到”的文件更好的方法。1.正如Phil正确指出的,创建时间没有记录,但是使用
%Z
而不是下面的%Y
来获得“更改时间”,这可能是你想要的。[更新]
对于mac用户,请使用
stat -f "%m" "$somefile"
,而不是上面特定于Linux的语法sxpgvts34#
创建时间不存储。
存储的是三个时间戳(通常,它们可以在某些文件系统上或通过某些文件系统选项关闭):
对文件的“更改”被计为权限更改、重命名等。而修改仅为内容。
np8igboo5#
虽然ctime不是技术上的创造时间,但它通常是。
由于ctime不受文件内容变化的影响,它通常只在文件创建时更新。是的-我能听到你们的尖叫-如果你改变访问权限或所有权,它也会更新.但通常这是一次完成的事情,通常在你把文件放在那里的同时。
就我个人而言,我总是用mtime来做任何事情,我想这就是你想要的。但是无论如何..
字符串
tp5buhyn6#
查找一个是好的,但我认为你可以使用另一种方式,特别是如果你需要现在有多少秒的文件旧
第一个月
使用GNU日期
vi4fp9gy7#
考虑工具“stat”的结果:
字符串
你可以在这里看到访问/修改/更改的三个日期。没有创建日期。你只能真正确定文件内容被修改(“修改”字段)或其inode被更改(“更改”字段)。
当两个字段都更新时的示例:
如果有人将额外的信息连接到文件的末尾,“修改”将被更新。
如果有人通过chmod更改了权限,“更改”将被更新。
nkkqxpd98#
我用
字符串
ia2d9nvy9#
从coreutils 8.31、glibc 2.28和内核版本4.11或更新版本开始,
stat
返回文件的创建日期。字符串
我们找回两小时前的时间
型
我们比较了这两个日期
型