次: , 上: Links


2.2.1 シンボリックリンク

シンボリックリンクとは,他のファイルを参照する名前です.GNU findは,シンボリックリンクを二つの方法のいずれかで処理します.最 初のものは,リンク先を参照する方法で,これはシンボリックリンクの場合は, 指定した特徴にマッチするかどうかを確認するため,リンク先のファイルを調 査することを意味します.二番目の方法は,実際のリンクを探している状況で, リンク自身を調査することが可能です.シンボリックリンクのリンク先のファ イルも,findコマンドで検索しているディレクトリ階層にある場合,こ れら二つの選択肢の違いを詳しく理解しておく必要はありません.

デフォルトで,findはシンボリックリンクが見つかると,それ自身を調 査します(そして,その後でリンク先のファイルをたどり,それも調査します). findにリンク先を参照するようにし,リンクが示すファイルを調査させ るため,findで`-L'オプションを指定してください.デフォルト の動作を明示的に指定するため,`-P'オプションを使用することが可能で す.`-H'オプションは中間的なオプションで,コマンドラインでリストアッ プされているシンボリックリンクはリンク先を参照しますが,それ以外のシン ボリックリンクはリンク先を参照しません.

シンボリックリンクは“ハードリンク”とは異なり,リンク先を参照可能にす るために,リンク先のファイルへの権限が必要になることを意味します.つま り,`-L'オプションを指定している場合でも,findはリンクが示 すファイルの属性を(十分な権限が無いという理由で)調査することができない 可能性があります.この状況では,`find'はリンク自身の属性を使用しま す.シンボリックリンクは存在するが,それが指し示すファイルが無い場合も, 同じようなことになります.

リンクに関連したfindの動作を制禦するオプションには,以下のものが あります.

`-P'
findはシンボリックリンク先を参照しません.これはデフォルトの動作 です.このオプションは,コマンドラインのパス名の前に指定する必要があり ます.
`-H'
findはシンボリックリンク先を参照しません(しかし,コマンドライン 上ののファイル名はリンク先を参照します).シンボリックリンク先を参照でき ない場合,シンボリックリンク自身の情報が使用されます.このオプションは, コマンドラインのパス名の前に指定する必要があります.
`-L'
findは,可能であればシンボリックリンク先を参照し,不可能なところ では,シンボリックリンク自身の属性を使用します.このオプションはコマン ドラインのパス名の前に指定する必要があります.このオプションを使用する と,`-noleaf'オプションと同じ動作も暗黙に指定されます.後で `-H'や`-P'オプションを使用する場合でも,`-noleaf'はオフ になりません.
`-follow'
このオプションは,“expression”の部分の形式で,パス名の後に指定する必 要がありますが,それ以外は`-L'と同じです.

`-L'オプションを与えた時の動作には,以下の違いがあります.

`-L'オプションまたは`-H'オプションが使用されている場合, `-newer',`-anewer',そして`-cnewer'の引数として使用され ているファイル名は,リンク先を参照され,リンク先のタイムスタンプが代わ りに使用されます(可能であれば – そうでなければ,シンボリックリンクのタ イムスタンプが使用されます).

— Test: -lname pattern
— Test: -ilname pattern

ファイルがシェルパターンpatternにマッチする内容のシンボリックリン クの場合は真です.`-ilname'は,大文字小文字を区別しないマッチです. pattern引数の詳細は,See Shell Pattern Matching. `-L'の 効果がある場合,このテストはシンボリックリンクが壊れていない限り,常に 失敗します.そして,現在のディレクトリとそのサブディレクトリ内の, sysdep.cへのシンボリックリンクをすべてリストアップするために,以 下のように実行します.

          find . -lname '*sysdep.c'