GNU find
manはこのオプションについて読むことができます-atime
:
-atime n
ファイルはn * 24時間前に最後にアクセスされました。 findが24時間前に最後にファイルにアクセスした期間を計算すると、すべての小数部分は無視されます。したがって、-atime +1 を一致させるには、ファイルに少なくとも 2 日前にアクセスする必要があります。
「n日前」の代わりに「n*24時間前」を使用したことに注意してください。
これで、25時間の長さの日(時にはうるう秒のある24時間1秒の長さの日がある)に冬の時間に切り替えるとどうなるか心配になります。
毎日のクローンジョブを使用している場合、find -daystart -atime +1
繰り返しの期間にアクセスしたファイルが失われる可能性がありますか?
ベストアンサー1
-daystart
マニュアルには次のように記載されています。
- オプション:
-daystart
時間は24時間前ではなく、今日から測定されます。したがって、昨日変更されたホームディレクトリの一般ファイルを一覧表示するには、次の手順を実行します。
find ~/ -daystart -type f -mtime 1
「-daystart」オプションは、他のテストの実行方法に影響を与えるという点で、他のほとんどのオプションとは異なります。影響を受けるテストは、「-amin」、「-cmin」、「-mmin」、「-atime」、「-ctime」、および「-mtime」です。 "-daystart"オプションは、コマンドラインでこのオプションの後に表示されるすべてのテスト動作にのみ影響します。
これは、以下を実行する場合を意味します。
find . -daystart -mtime 1
2015-10-25 01:00
その後、(その時間の最初の発生)と冬の変更時間の翌日(今年のヨーロッパでは2015-10-25)の間に最後に変更されたファイルが提供されます2015-10-25 23:59:59.999...
。
次のように実行すると
find . -daystart -mtime 0
2015年10月25日に00:00から22:59:59の間に変更されたファイルを提供すると予想しましたが、簡単なテスト(findutils 4.4.2を使用)を実行すると、01:00から22:59:59の間に修正された最初のファイルを返すことがわかりました。 23:59:59(時間変更前に実行しない場合)
$ find . -printf '%TFT%TT %p\n'
2015-09-25T14:28:25.4868761490 .
2015-10-25T00:02:00.0000000000 ./a
2015-10-25T23:43:00.0000000000 ./c
2015-10-25T12:42:00.0000000000 ./b
$ NO_FAKE_STAT=1 faketime -m '2015-10-25 12:23' find . -daystart -mtime 0
./c
./b
$ NO_FAKE_STAT=1 faketime -m '2015-10-25 00:32' find . -daystart -mtime 0
./a
./b
$ NO_FAKE_STAT=1 faketime -m '2015-10-25 12:23' find . -daystart -mtime 1
./a
どんなに宣言してもしたがって、昨日変更されたホームディレクトリの一般ファイルを一覧表示するには上記は必ずしも真実ではありません。
それ以外の場合は、-daystart
24時間間隔で変更されたファイルを確認してください。そのため、2015年10月25日に実行すると、12:43
2015find . -mtime 0
年10月24日13時43分から現在までに変更されたファイルを受け取ります。
昨日、最後に変更されたファイルを提供するより安定した方法は次のとおりです。
find . -newermt 'yesterday 0' ! -newermt 'today 0'
これには、昨日その時間のファイルではなく、今日00:00:00.0000000000に最後に変更されたファイルが含まれます。残念ながら述語はありません-oldermt
。
globでzsh
使用される関数はage
次のとおりです。
$ autoload age # in ~/.zshrc
$ ls -ld -- *(age,yesterday,)
同様の問題があります。