1. ホーム
  2. linux

[解決済み] find -mtime' コマンドの説明

2022-03-03 13:01:49

質問

日付のあるログを最新以外すべて削除しようとしています。ファイルを削除するスクリプトを実行する前に、もちろんコマンドをテストして、正確な結果をもたらすことを確認したいのです。

これらのコマンドを実行すると、日付が

Sep  1 00:53:44 AST 2014

ディレクトリのリストアップ。

Aug 27 23:59 testfile.2014-08-27.log
Aug 28 23:59 testfile.2014-08-28.log
Aug 29 23:59 testfile.2014-08-29.log
Aug 30 23:59 testfile.2014-08-30.log
Aug 31 23:59 testfile.2014-08-31.log
Sep  1 00:29 testfile.log

mtime +1 は1日以上前のファイルをすべてリストアップするものだと思っていました。なぜ8-30.logがリストアップされないのですか?

find . -type f -mtime +1 -name "testfile*log"
./testfile.2014-08-27.log
./testfile.2014-08-28.log
./testfile.2014-08-29.log

これが目的の効果なのですが、試行錯誤の結果です。この0は何を言っているのだろう?

find . -type f -mtime +0 -name "testfile*log"
./testfile.2014-08-30.log
./testfile.2014-08-27.log
./testfile.2014-08-28.log
./testfile.2014-08-29.log

解決方法は?

のPOSIX仕様では 見つける は言う。

-mtime n プライマリは、初期化時間からファイル変更時間を引いた時間を86400で割った値(余りは捨てる)が n .

興味深いのは、その記述に find は、さらに「初期化時間」を指定していない。 おそらくですが、その時刻は find が初期化(実行)される。

説明文の中で n は,以下のように,プラス記号('+')またはマイナス記号('-')を先行させた10進数の整数として解釈される。

+n 以上 n .
n その通り n .
-n 未満 n .

与えられた時間(2014-09-01 00:53:44 -4:00、ここでASTは大西洋標準時なので、UTCからのタイムゾーンのオフセットはISO 8601では-4:00だがISO 9945(POSIX)では+4:00だと推論するが、それほど重要ではない)には、次のようになる。

1409547224 = 2014-09-01 00:53:44 -04:00
1409457540 = 2014-08-30 23:59:00 -04:00

ということで

1409547224 - 1409457540 = 89684
89684 / 86400 = 1

エポックからの秒数」の値が間違っていても、相対的な値は正しい(世界のどこかのタイムゾーンでは正しい)のです。

その n したがって、2014-08-30のログファイルについて計算された値は、まさに 1 (計算は整数演算で行われます)、また +1 が拒否するのは、厳密には > 1 の比較(そして >= 1 ).