2016-08-03 3 views
2

私は一時ファイルをパージするためにbashスクリプトに取り組んでいて、不可解な動作に遭遇しました。find - mtime対mmin - 奇妙な結果

# Find using mmin flag 
find /usr/local/store/file/temp/3_day/ -mmin +$((60*24*3)) -type f > /tmp/old_files_by_mmin.txt 

# Find using mtime flag 
find /usr/local/store/file/temp/3_day/ -mtime +3 -type f > /tmp/old_files_by_mtime.txt 

diff -u /tmp/old_files_by_mmin.txt /tmp/old_files_by_mtime.txt 

最初の数行:

--- /tmp/old_files_by_mmin.txt 2016-08-03 16:56:42.535458820 +0000 
+++ /tmp/old_files_by_mtime.txt 2016-08-03 16:56:58.310681524 +0000 
@@ -117,59 +117,6 @@ 
/usr/local/store/file/temp/3_day/image/resize/2016/07/29/11/15/36/1296924350 
/usr/local/store/file/temp/3_day/image/resize/2016/07/29/11/47/52/1950191632 
/usr/local/store/file/temp/3_day/image/resize/2016/07/29/11/30/01/711250694 
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/10/04/15/44313759 
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/10/04/15/1589177813 
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/10/04/15/1189074525 
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/10/56/44/91382315 
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/09/43/45/1622776054 
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/01/44/57/1465920226 
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/01/23/17/1467026748 
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/01/15/58/1990201487 
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/01/13/19/1990298215 
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/01/35/59/518813467 
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/12/10/53/1962045410 
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/12/31/27/290517373 
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/12/05/08/547481306 

はなぜ-mminフラグは、ファイルのmtimeフラグがないファイルを拾っていますか?両方とも、現在+ 3日より古いファイルが見つかったとしたら?実装間の違いを考えると

+1

丸め日数と関連する可能性があります。ところで、なぜ「バッシュ」? 'find'は私が知っている限り組み込みではありません。 – mustaccio

+0

@mustaccio:あなたが正しいと思う。あなたが「組込み」ではないことを意味するかどうかは不明です。これはLinuxシステムなので、bash/findは常に利用可能です。 –

+1

@MikePurcell、 "builtin"は外部ツールに対する "シェルの一部"を意味します。シェルの一部でない場合は、正確なOSと、OSが提供するツールのバージョンを指定する必要があります。 –

答えて

1

は、それがwhat the POSIX standard for find義務見て価値がある:

-mtime n

プライマリが86400(で割った、初期設定時間から減算ファイルの修正時刻場合はtrueとして評価しなければなら残りの部分は廃棄されます))は、nです。


同様に、(BSDの検索のための)手動あたり:

単位を指定しない場合

-mtime n[smhdw]

、このプライマリは真と評価された場合、ファイルの最後の変更の間の差検索開始時刻が、次の完全な24時間に切り上げられた時刻はn、24時間です。

...ので:BSD findでは、デフォルトの動作は、完全な24時間の期間に丸めることです。


GNU findの場合、設定可能性の尺度があります。 -daystart参照:

-daystart

測定時間、今日の最初からではなく、24時間前から( - アミン、-atime、-cmin、-ctime、-mmin、および-mtimeのため)。このオプションは、後でコマンドラインに表示されるテストにのみ影響します。 -atimeの定義で与えられるよう

ただし、デフォルトの動作は次のとおりです。

-atime n

ファイルの最後n * 24時間前にアクセスしました。 findは、ファイルが最後にアクセスされた日時を24時間前に把握すると、小数部分は無視されるため、-atime +1と一致するには、少なくとも2日前にファイルにアクセスする必要があります。