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 に答える
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

これはおそらく少し壊れやすいですが、最新のファイル (またはディレクトリ) の経過時間を秒単位で返す必要があります$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 に答える