web-dev-qa-db-ja.com

「find -mtime」コマンドの説明

最新のものを除くすべての日付付きログを削除しようとしています。スクリプトを実行してファイルを削除する前に、もちろんコマンドをテストして、正確な結果が表示されることを確認します。

これらのコマンドを実行するときの日付は次のとおりです。

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
19
user3299633

find のPOSIX仕様には次のように書かれています。

-mtimenプライマリは、ファイル変更時間を初期化時間から減算し、86400で除算した場合(残りをすべて破棄した場合)、trueと評価します。はnです。

興味深いことに、findの説明は、「初期化時間」をさらに指定しません。ただし、おそらくfindが初期化(実行)されるときです。

説明では、nが主引数として使用される場合は常に、オプションでプラス( '+')またはマイナスが先行する10進整数として解釈されます。 -sign( '-')記号、次のとおり:

+nn以上。
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

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

したがって、2014-08-30ログファイルに対して計算されたn値は正確に1(計算は整数演算で行われます)であり、 +1は厳密に> 1比較であるため(>= 1ではなく)拒否します。

36

+1は2日前を意味します。丸みを帯びています。

6
txt

findコマンドとmtimeを使用できます。

例えば:

 find /path of the folder -type f -mtime +30

-typeはファイルの種類を示します。

+30は、現在の日付より前の日付を指します。

その他のオプションについては、 manページ を参照できます。

0
Javeed Shakeel