找出文件是否在最近2分钟内被修改

ph3*_*3nx 17 unix linux bash sh

在bash脚本中,我想检查文件是否在最近2分钟内被更改.

我已经发现我可以访问上次修改的日期stat file.ext -c %y.如何检查此日期是否超过两分钟?

Sky*_*net 20

我认为这会有所帮助,

find . -mmin -2 -type f -print
Run Code Online (Sandbox Code Playgroud)

也,

find / -fstype local -mmin -2
Run Code Online (Sandbox Code Playgroud)


小智 12

完成脚本以完成您所追求的目标:

#!/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
Run Code Online (Sandbox Code Playgroud)

  • 如果其他人发现这个,在 Mac 上,对于 FILETIME 使用 `stat -t %s -f %m $FILENAME` (3认同)

ph3*_*3nx 8

我用这种方式解决了问题:获取文件的当前日期和最后修改日期(均为unix时间戳格式).从当前日期中减去修改日期,并将结果除以60(将其转换为分钟).

expr $(expr $(date +%s) - $(stat mail1.txt -c %Y)) / 60
Run Code Online (Sandbox Code Playgroud)

也许这不是最干净的解决方案,但效果很好.


小智 6

这是我的方法:(我会使用适当的临时文件)

touch -d"-2min" .tmp
[ "$file" -nt .tmp ] && echo "file is less than 2 minutes old"
Run Code Online (Sandbox Code Playgroud)


jos*_*osh 6

这是一个更简单的版本,它使用 shell 数学而不是 expr:

秒(想法)

echo $(( $(date +%s) - $(stat file.txt  -c %Y) ))
Run Code Online (Sandbox Code Playgroud)

分钟(用于回答)

echo $(( ($(date +%s) - $(stat file.txt  -c %Y)) / 60 ))
Run Code Online (Sandbox Code Playgroud)

小时

echo $(( ($(date +%s) - $(stat file.txt  -c %Y)) / 3600 ))
Run Code Online (Sandbox Code Playgroud)