前回以降にディレクトリの内容が変更されたことを確認する最速の方法

前回以降にディレクトリの内容が変更されたことを確認する最速の方法

以下を使用してディレクトリを確認するスクリプトがあります。mdls*(追加された時間でソート)いくつかの操作を実行します。ただし、mdls速度が少し遅いので、必ず必要な場合(ディレクトリの内容が変更された場合など)にのみ実行したいと思います。

私の考えは、それを一度実行しmdlsて結果をキャッシュし、ディレクトリの状態を追跡することを行うことです。後続の実行では、確認ジョブを再実行し、結果を私の結果と比較します。それ以外の場合はもう一度実行しmdls、それ以外の場合はキャッシュを使用してください。

私はdu '/dir/path' | tail -1(ディレクトリのサイズがバイトと同じである場合は、内容が変更されていない可能性があります)またはls '/dir/path' | md5'

私は現在のmd5ファイル名の変更に対する回復力のためにこのソリューションを好みます。しかし、どちらのソリューションも不都合で、より効率的な方法(まだ高速)があるかどうかを知りたいです。

役に立つ場合、解決策は最終的にRubyスクリプトで使用されます。


*この記事は投稿しませんさまざまなリクエストをしてみてくださいmdlsそれは要点ではないからです。他の遅いコマンドかもしれません。

答え1

新しいファイル/削除されたファイルを確認するだけで十分です。既存のmtimeファイル)、ディレクトリ自体のタイムスタンプを使用できます。

を通じて受け取ることができますstat。ここでの出力は1970年初め以降の秒単位です。

$ stat -f %m "$dir"      # stat on OS X
1512493220
$ stat -c %Y "$dir"      # GNU coreutils stat
1512493801
$ stat -c %.9Y "$dir"    # nanoseconds too
1512493801.802870731

ファイルの変更を確認するには、以下を使用してすべてのタイムスタンプを確認し、最大のタイムスタンプを取得できますsort

$ stat -f %m "$dir"/* | sort -n | tail -1
1512428453

(これはほとんどバッシュFAQ 003これは主に最新のタイムスタンプ/最大サイズなどのファイルを見つけることですが、かなり複雑なソリューションも含まれています。 )

関連情報