天儿真好,
我需要从sh shell脚本中查看特定文件是否超过58分钟.我说的是直接的vanilla Solaris shell,看起来有一些POSIX扩展.
我想过做一个
touch -t YYYYMMDDHHmm.SS /var/tmp/toto
Run Code Online (Sandbox Code Playgroud)
时间戳是58分钟前然后做一个
find ./logs_dir \! -newer /var/tmp/toto -print
Run Code Online (Sandbox Code Playgroud)
我们需要使用镜像对从各种服务器检索到的一些日志文件进行后处理.等待文件稳定是该团队决定镜像是否完成的方式,因此当天的日志现已完成并准备好进行处理.
任何建议都感激不尽.
干杯,
Mar*_*cos 17
我需要一些东西来测试特定文件的年龄,而不是经常重新下载.所以使用GNU date和bash:
# if file's modtime hour is less than current hour:
[[ $(date +%k -r GPW/mstall.zip) -lt $(date +%k) ]] && \
wget -S -N \
http://bossa.pl/pub/metastock/mstock/mstall.zip \
Run Code Online (Sandbox Code Playgroud)
更新 - 这个版本对我来说效果更好,更准确,更容易理解:
[[ $(date +%s -r mstall.zip) -lt $(date +%s --date="77 min ago") ]] && echo File is older than 1hr 17min
Run Code Online (Sandbox Code Playgroud)
BSD变体(在Mac上测试)是:
[[ $(stat -f "%m" mstall.zip) -lt $(date -j -v-77M +%s) ]] && echo File is older than 1hr 17min
Run Code Online (Sandbox Code Playgroud)
alx*_*lxp 11
您可以在find命令中使用不同的单位,例如:
find . -mtime +0h55m
Run Code Online (Sandbox Code Playgroud)
将返回任何修改日期早于55分钟的文件.
现在这是一个老问题了,抱歉,但是为了其他人像我一样寻找一个好的解决方案......
我能想到的最好的方法是使用find(1)命令,这是我所知道的唯一可以直接测试文件年龄的 Un*x 命令:
if [ "$(find $file -mmin +58)" != "" ]
then
... regenerate the file ...
fi
Run Code Online (Sandbox Code Playgroud)
另一个选项是使用stat(1)命令以秒为单位返回文件的存在时间,并使用 date 命令以秒为单位返回当前时间。与 bash shell 数学运算符相结合,计算出文件的年龄变得非常容易:
age=$(stat -c %Y $file)
now=$(date +"%s")
if (( (now - age) > (58 * 60) ))
then
... regenerate the file ...
fi
Run Code Online (Sandbox Code Playgroud)
您可以在没有两个变量的情况下执行上述操作,但它们使事情变得更清晰,就像使用 bash 数学(也可以替换)一样。多年来,我在脚本中广泛使用了 find(1) 方法,并推荐它,除非您确实需要以秒为单位了解年龄。