2.5.2 タイムスタンプを比較する
- テスト: -newerXY reference
対象ファイルのタイムスタンプ「X」が、ファイルreferenceのタイムスタンプ「Y」より新しい場合に成功します。タイムスタンプが等しい場合は失敗します。文字「X」と「Y」には、次のいずれかを指定できます。
- ‘a’
referenceの最終アクセス時刻
- ‘B’
referenceの誕生時刻。この時刻が不明な場合、テストは成功しません。
- ‘c’
referenceの最終状態変更時刻
- ‘m’
referenceの最終内容変更時刻
- ‘t’
reference引数を、ファイル名ではなく、時刻を直接表す文字列として解釈します。タイムスタンプの解釈方法については、日付の入力形式を参照してください。「-newerXt」形式のテストは有効ですが、「-newertY」形式のテストは無効です。
たとえば、テスト
-newerac /tmp/fooは、/tmp/fooの状態が変更された時刻より後にアクセスされたすべてのファイルに対して成功します。ここでは、「X」は「a」、「Y」は「c」です。すべてのファイルについて誕生時刻が分かるわけではありません。「Y」が「B」で、referenceの誕生時刻を利用できない場合、
findは理由を説明するエラーメッセージを出して終了します。「X」が「B」で、現在の対象ファイルの誕生時刻が不明な場合は、テストが失敗するだけです。つまり、-falseと同じ動作になります。ほとんどのUnixの実装など、ファイルの誕生時刻に対応していないOSもあります。一方、NetBSD-3.1などは対応しています。対応するOSであっても、特定のファイルでは情報を利用できない場合があります。たとえば、NetBSDではUFS2ファイルシステム上の誕生時刻に対応していますが、UFS1では対応していません。
/usrにある、今年の2月1日の開始時点より後に内容が変更されたファイルを列挙する方法は2つあります。1つは「-newermt」を使う方法です。
find /usr -newermt "Feb 1"
もう1つの方法は、4.3.3(2007年)より前のfindでも使えます。
touch -t 02010000 /tmp/stamp$$ find /usr -newer /tmp/stamp$$ rm -f /tmp/stamp$$
- テスト: -anewer reference
- テスト: -cnewer reference
- テスト: -newer reference
現在のファイルの最終アクセス時刻、最終状態変更時刻、または最終データ変更時刻が、referenceファイルの最終データ変更時刻より新しい場合に真になります。時刻が等しい場合は偽です。したがって、「-anewer」は「-neweram」、「-cnewer」は「-newercm」、「-newer」は「-newermm」と同等です。
referenceがシンボリックリンクで、「-H」または「-L」が有効な場合は、常にリンク先ファイルの最終データ変更時刻を使います。
これらのテストに「-follow」が影響するのは、コマンド行で「-follow」がそのテストより前にある場合だけです。「-follow」の詳細については、シンボリックリンクを参照してください。
たとえば、/bin/shの内容が最後に変更された時刻より後に変更されたファイルを列挙するには、次のようにします。
find . -newer /bin/sh
- テスト: -used n
ファイルへの最後のアクセスが、最後の状態変更からn日後に行われた場合に真になります。使われておらず、ディスク容量を節約するためにアーカイブや削除の対象にできそうなファイルを探すのに役立ちます。