シンボリックリンクとは,他のファイルを参照する名前です.GNU
find
は,シンボリックリンクを二つの方法のいずれかで処理します.最
初のものは,リンク先を参照する方法で,これはシンボリックリンクの場合は,
指定した特徴にマッチするかどうかを確認するため,リンク先のファイルを調
査することを意味します.二番目の方法は,実際のリンクを探している状況で,
リンク自身を調査することが可能です.シンボリックリンクのリンク先のファ
イルも,find
コマンドで検索しているディレクトリ階層にある場合,こ
れら二つの選択肢の違いを詳しく理解しておく必要はありません.
デフォルトで,find
はシンボリックリンクが見つかると,それ自身を調
査します(そして,その後でリンク先のファイルをたどり,それも調査します).
find
にリンク先を参照するようにし,リンクが示すファイルを調査させ
るため,find
で‘-L’オプションを指定してください.デフォルト
の動作を明示的に指定するため,‘-P’オプションを使用することが可能で
す.‘-H’オプションは中間的なオプションで,コマンドラインでリストアッ
プされているシンボリックリンクはリンク先を参照しますが,それ以外のシン
ボリックリンクはリンク先を参照しません.
シンボリックリンクは“ハードリンク”とは異なり,リンク先を参照可能にす
るために,リンク先のファイルへの権限が必要になることを意味します.つま
り,‘-L’オプションを指定している場合でも,find
はリンクが示
すファイルの属性を(十分な権限が無いという理由で)調査することができない
可能性があります.この状況では,‘find’はリンク自身の属性を使用しま
す.シンボリックリンクは存在するが,それが指し示すファイルが無い場合も,
同じようなことになります.
リンクに関連したfind
の動作を制禦するオプションには,以下のものが
あります.
find
はシンボリックリンク先を参照しません.これはデフォルトの動作
です.このオプションは,コマンドラインのパス名の前に指定する必要があり
ます.
find
はシンボリックリンク先を参照しません(しかし,コマンドライン
上ののファイル名はリンク先を参照します).シンボリックリンク先を参照でき
ない場合,シンボリックリンク自身の情報が使用されます.このオプションは,
コマンドラインのパス名の前に指定する必要があります.
find
は,可能であればシンボリックリンク先を参照し,不可能なところ
では,シンボリックリンク自身の属性を使用します.このオプションはコマン
ドラインのパス名の前に指定する必要があります.このオプションを使用する
と,‘-noleaf’オプションと同じ動作も暗黙に指定されます.後で
‘-H’や‘-P’オプションを使用する場合でも,‘-noleaf’はオフ
になりません.
‘-L’オプションを与えた時の動作には,以下の違いがあります.
find
は,ディレクトリツリーを検索するとき,ディレクトリへのシンボ
リックリンクをたどります.
‘-L’オプションまたは‘-H’オプションが使用されている場合, ‘-newer’,‘-anewer’,そして‘-cnewer’の引数として使用され ているファイル名は,リンク先を参照され,リンク先のタイムスタンプが代わ りに使用されます(可能であれば – そうでなければ,シンボリックリンクのタ イムスタンプが使用されます).
ファイルがシェルパターンpatternにマッチする内容のシンボリックリン クの場合は真です.‘-ilname’は,大文字小文字を区別しないマッチです. pattern引数の詳細は,See Shell Pattern Matching. ‘-L’の 効果がある場合,このテストはシンボリックリンクが壊れていない限り,常に 失敗します.そして,現在のディレクトリとそのサブディレクトリ内の, sysdep.cへのシンボリックリンクをすべてリストアップするために,以 下のように実行します.
find . -lname '*sysdep.c'