秒単位で時間を設定(検索)するには?

秒単位で時間を設定(検索)するには?

-atimeミリ秒、秒、または分を設定する方法は?デフォルトは日数です。

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

cronジョブを毎時間実行して、特定のディレクトリ内のファイルがその時間内にアクセスされたことを確認したいと思います。時間を小数点以下の桁数で入力すると機能しないようです。

find . -atime 0.042 -print

しかし、より良い解決策があるかもしれません。別のコマンドがありますか?あるいは、最後に変更されたファイルを見つけるためにこれを実行できない可能性があります。X分を使用すると、-mmin時間を分単位で設定できます。おそらく、そのようなアクセス時間オプションがないということは、情報が異なるように保存されるという意味ですか?

Ubuntu 16.04を使用しています。

答え1

GNU findを使用すると、推測できるように、「ファイルがn分前に最後にアクセスされました」の代わり-aminに使用できます。-atime

つまり、ほとんどの最新システムは、relatime実際のファイルを更新して書き込み時にメタデータのみを保存するファイルシステムオプションをデフォルトに設定していることに注意してください。修正済み最後の訪問以降、またはしきい値を超えた(通常24時間)。

したがって、そのファイルシステムの設定を変更するか、他の方法を参照することをお勧めします。含む独自のデーモンを書かなくても、ファイルシステムのアクティビティをトリガーするようにスクリプトを設定する便利な方法です。

答え2

これにより、-mtime <timespec>システムは<timespec>その時点でファイルの寿命を確認し始めます。find

find非常に小さいディレクトリツリーでそれを実行しない限り、ディレクトリツリーをクロールして各ファイルに対して操作を実行するのに数秒または数時間でなくてもミリ秒かかります。lstat()したがって、1秒未満の精度が必ずしも大きな意味を持つわけではありません。

また、すべてのファイルシステムが1秒未満の細かいタイムスタンプをサポートしているわけではありません。

しかし、いくつかのオプションがあります。

find多くのBSDとBSDのいずれかを使用して、schily-tools次のことができます。

find . -atime -1s

find開始時点と比較して、1秒以内に最後にアクセスしたファイルを見つけます。

そしてzsh

ls -ld -- **/*(Dms-1)

1秒未満の細分化にGNUツールを使用すると、atimeは次のように設定された参照ファイルを使用できますtouch

touch -ad '0.5 seconds ago' ../reference
find . -anewer ../reference

または最新バージョンを使用してくださいperl

perl -MTime::HiRes=lstat,clock_gettime -MFile::Find -le '
  $start =  clock_gettime(CLOCK_REALTIME) - 0.5;
  find(
    sub {
      my @s = lstat $_;
      print $File::Find::name if @s and $s[8] > $start
    }, ".")'

関連情報