1

我需要一个 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 监控最新备份的年龄(我想要一个警报,以防备份机制中断)。单线会很棒,因为它更方便用作 zabbix 用户参数,但不是必需的。

谢谢!

4

5 回答 5

3

Perl 的救援:

perl -le '$d=shift;chomp($f=(`ls -t $d/*`)[0]);print 24*60*60*-M$f' /path/to/dir
于 2013-01-08T11:11:47.927 回答
2

这是旧帖子,但也许它可以帮助某人。

我使用以下方法来计算文件的时间(以小时为单位)

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

date +%s - 自 1970-01-01 00:00:00 UTC 以来的秒数

stat -c %Y - 为参数中的文件提供相同的值

这在 OS X 和 BSD 上不起作用,stat 没有 -c 选项,但大多数 Linux 发行版应该没问题。

于 2015-04-28T14:47:31.963 回答
0

这可能有点脆弱,但应该以秒为单位返回最新文件(或目录)的年龄$DIR

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

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

于 2013-01-08T11:06:21.843 回答
0

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

stat -c "%Y %n" -- * | sort -rn | awk -v d=$(date +%s) 'NR==1 {print (d-$1), $2; exit}'
于 2013-01-08T14:18:34.803 回答
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!!

于 2018-05-09T20:05:18.363 回答