如何编写脚本以确定文件在/ bin/sh中是否超过30分钟?
不幸的是,系统中不存在统计数据.它是一个旧的Unix系统,http://en.wikipedia.org/wiki/Interactive_Unix
遗憾的是,Perl没有安装在系统上,客户也不想安装它,也没有其他任何东西.
Sch*_*ern 67
这是使用的一种方式find.
if test "`find file -mmin +30`"
Run Code Online (Sandbox Code Playgroud)
find如果相关文件包含空格或特殊字符,则必须引用该命令.
sle*_*man 28
以下为您提供以秒为单位的文件年龄:
echo $(( `date +%s` - `stat -L --format %Y $filename` ))
Run Code Online (Sandbox Code Playgroud)
这意味着对于超过30分钟的文件,这应该给出真/假值(1/0):
echo $(( (`date +%s` - `stat -L --format %Y $filename`) > (30*60) ))
Run Code Online (Sandbox Code Playgroud)
30*60 - 一分钟60秒,不预先计算,让CPU为你工作!
alv*_*rre 16
如果你正在写一个sh脚本,最有用的方法是使用test已经提到的stat技巧:
if [ `stat --format=%Y $file` -le $(( `date +%s` - 1800 )) ]; then 
    do stuff with your 30-minutes-old $file
fi
Run Code Online (Sandbox Code Playgroud)
注意,这[是一个符号链接(或其他等价物)test; 看man test,但请记住,test并且[还内建bash的,因此可以有略微不同的行为.(另请注意[[bash复合命令).
Sch*_*ern 10
好的,没有统计数据和残缺的发现.这是您的替代方案:
编译GNU coreutils以获得合适的查找(以及许多其他方便的命令).你可能已经把它当作gfind了.
也许你可以date用来获取文件修改时间-r吗?
(`date +%s` - `date -r $file +%s`) > (30*60)
Run Code Online (Sandbox Code Playgroud)
或者,使用-nt比较来选择哪个文件更新,麻烦是在过去30分钟制作一个mod时间的文件.  touch通常可以做到这一点,但所有投注都是关于什么是可用的.
touch -d '30 minutes ago' 30_minutes_ago
if [ your_file -ot 30_minutes_ago ]; then
    ...do stuff...
fi
Run Code Online (Sandbox Code Playgroud)
最后,看看Perl是否可用而不是挣扎谁知道shell实用程序的版本.
use File::stat;
print "Yes" if (time - stat("yourfile")->mtime) > 60*30;
Run Code Online (Sandbox Code Playgroud)
        对于像我这样的人,根据@slebetman的回答,不喜欢背蜱:
echo $(( $(date +%s) - $(stat -L --format %Y $filename) > (30*60) ))
Run Code Online (Sandbox Code Playgroud)