Bash:计算目录中最新文件的年龄

时间:2013-01-08 10:49:48

标签: bash backup zabbix

我需要一个bash脚本来获取给定目录中最新文件的年龄(以小时或秒为单位)。例如:

-rw-r--r-- 1 root root 3.0M 2012-12-31 12:36 2012_12_31_1236_redis_dump_encrypted.tgz
-rw-r--r-- 1 root root 2.8M 2013-01-01 11:33 2013_01_01_1133_redis_dump_encrypted.tgz
-rw-r--r-- 1 root root 2.4M 2013-01-04 14:17 2013_01_04_1417_redis_dump_encrypted.tgz
-rw-r--r-- 1 root root 2.7M 2013-01-05 12:26 2013_01_05_1226_redis_dump_encrypted.tgz
-rw-r--r-- 1 root root  54M 2013-01-06 14:16 2013_01_06_1415_redis_dump_encrypted.tgz
-rw-r--r-- 1 root root 3.7M 2013-01-07 16:42 2013_01_07_1642_redis_dump_encrypted.tgz
-rw-r--r-- 1 root root 3.4M 2013-01-08 12:36 2013_01_08_1236_redis_dump_encrypted.tgz

命令应该接受目录路径并返回自最新文件(2013_01_08_1236_redis_dump_encrypted.tgz)创建以来经过的秒数。

我需要这个以便使用zabbix监视最新备份的年龄(我希望在备份机制中断的情况下发出警报)。 One-liner会很棒,因为它更适合用作zabbix用户参数,但不是必需的。

谢谢!

5 个答案:

答案 0 :(得分:3)

Perl救援:

perl -le '$d=shift;chomp($f=(`ls -t $d/*`)[0]);print 24*60*60*-M$f' /path/to/dir

答案 1 :(得分:1)

这是老帖子,但也许对某人有帮助。

我使用以下方法计算文件的小时数

 echo $(( ( $(date +%s) - $(stat -c %Y filen.name)) / (60*60)  ))

日期+%s - 给出自1970-01-01 00:00:00 UTC

以来的秒数

stat -c%Y - 为参数

中的文件提供相同的内容

这不适用于OS X和BSD,stat没有-c选项,但大多数Linux发行版都没问题。

答案 2 :(得分:0)

这可能有点脆弱,但应该返回$DIR中最新文件(或目录)的年龄:

echo $(( $(date +%s) - $(ls -t $DIR | head -1 | xargs stat -f %a -t %s) ))

%s时间格式是自纪元以来的秒数,因此上面的行获取最新文件的名称(ls -t $DIR | head -1),获取自纪元以来的最后访问时间(以秒为单位){{{ 1}}),并从纪元以来的秒内减去当前时间。

答案 3 :(得分:0)

返回以秒为单位的年龄和文件名。

stat -c "%Y %n" -- * | sort -rn | awk -v d=$(date +%s) 'NR==1 {print (d-$1), $2; exit}'

答案 4 :(得分:0)

# If no files less than 5 minutes old are found, print a 1. Otherwise print a 0.
if [[ -z $(find $PATH -type f -mmin -5 2>/dev/null) ]]; then echo "1"; else echo "0"; fi

这对于单线程来说非常干净!你需要发送命令行参数的那一刻,你需要..一个程序! G0T0 10 FTW !!!!! 1 !!