繁体   English   中英

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

[英]Bash: calculate age of the newest file in directory

我需要一个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用户参数,但不是必需的。

谢谢!

Perl救援:

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

这是一个老帖子,但也许它有助于某人。

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

 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发行版都应该没问题。

这可能有点脆弱,但应该返回$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 ),并从该纪元以来的秒内减去当前时间。

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

stat -c "%Y %n" -- * | sort -rn | awk -v d=$(date +%s) 'NR==1 {print (d-$1), $2; exit}'
# 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 !!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM