フォルダに約10,000個のファイルがあるとします。私は毎時crontabを使用して、過去60分間に変更されたファイルを見つけて処理しています。

01:00:00にfind -mmin -60を呼び出します

最初のファイルが00:00:00に変更され、01:00:00の「find」によって簡単に見つけられると仮定します。

次に、10,000番目のファイルも00:00:00に変更されたと仮定します

しかし、は01:10になります:00 そして「find」はまだ10,000番目のファイルに到達するために懸命に働いています

したがって、70分後、「find」は10,000番目を返します00:00:00に変更されたファイル?

回答

GNU findでは、評価に使用される参照時間-mminなどのファイルは式の解析時に計算されて保存されるため、findが開始します。

これは、このようなすべての時間比較で、評価されたすべてのファイルに対して同じ時間参照、つまりfindが使用されることを意味します。コマンドラインを解析しました。

回答

GNUが見つかったとすると、これは簡単にテストできます:

% mkdir foo; cd foo; touch a b % find -mmin 1 . ./a ./b % find -mmin 1 -exec sleep 120 \; -print . # 2 minutes wait before this showed up ./a # another 2 minutes before this showed up ./b # and another 2 minutes for this one % find -mmin 1 % 

したがって、bが最後に変更されたのは、findが実行されてから少なくとも4分後ですがivid = aの “01d8eb925d”>

は、まだ一致しています。


-mminは「tPOSIX、これは実装次第ですが、上記の動作を期待しています。

コメント

  • FW IW、(FreeBSDベース?)私のMacのfindでも、find . -mmin 1 -exec sleep 120 \; -print

<の両方のファイルが表示されます。 / div>

回答

2つの端末で次のコマンドを次々に試してください

端末1:

find /path -mmin -0.017 -printf "$(date) %Tc %p\n" | grep "/path/to/some/file" 

ターミナル2:

touch -d " 0 seconds ago" /path/to/some/file 

次のように結果を取得できます

Wed Jul 17 11:48:33 IST 2019 Wed 17 Jul 2019 11:48:34 AM IST /path/to/some/file 

コマンドの開始時刻の前に検索結果を付けています。 findは、コマンドの開始時刻以降に変更されたファイルを検索できることを示しています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です