在bash脚本中,我想检查文件是否在最近2分钟内被更改。
我已经发现我可以使用stat file.ext -c %y
访问上次修改的日期。如何检查此日期是否超过两分钟?
答案 0 :(得分:18)
我认为这会有所帮助,
find . -mmin -2 -type f -print
也
find / -fstype local -mmin -2
答案 1 :(得分:10)
完成脚本以完成您的目标:
#!/bin/sh
# Input file
FILE=/tmp/test.txt
# How many seconds before file is deemed "older"
OLDTIME=120
# Get current and file times
CURTIME=$(date +%s)
FILETIME=$(stat $FILE -c %Y)
TIMEDIFF=$(expr $CURTIME - $FILETIME)
# Check if file older
if [ $TIMEDIFF -gt $OLDTIME ]; then
echo "File is older, do stuff here"
fi
答案 2 :(得分:6)
我用这种方式解决了问题:获取文件的当前日期和最后修改日期(均采用unix时间戳格式)。从当前日期中减去修改日期,并将结果除以60(将其转换为分钟)。
expr $(expr $(date +%s) - $(stat mail1.txt -c %Y)) / 60
也许这不是最干净的解决方案,但效果很好。
答案 3 :(得分:2)
这是我的处理方式:(我将使用适当的临时文件)
touch -d"-2min" .tmp
[ "$file" -nt .tmp ] && echo "file is less than 2 minutes old"
答案 4 :(得分:0)
这是一个更简单的版本,它在expr上使用shell数学:
SECONDS(想法)
echo $(($(date +%s) - $(stat file.txt -c %Y)))
分钟(答案)
echo $(($(($(date +%s) - $(stat file.txt -c %Y))) / 60))
答案 5 :(得分:0)
这是一个解决方案,它将测试文件是否早于X秒。它不使用具有特定于平台语法的stat
或具有不超过1分钟的粒度的find
。
interval_in_seconds=10
filetime=$(date -r "$filepath" +"%s")
now=$(date +"%s")
timediff=$(expr $now - $filetime)
if [ $timediff -ge $interval_in_seconds ]; then
echo ""
fi