私は持っています
link -> file
はい
find -L . -name 'link'
そして得る
./link
なぜそんなことですか?
その人は次の事実を見つけました。
-L:シンボリックリンクに従います。 findがファイルに関する情報を確認または印刷するときに使用される情報は、リンク自体ではなくリンクが指すファイルの属性から取得する必要があります(壊れたシンボリックリンクであるか、findがリンクが指しているファイルを確認できない場合を除く)。 )。
答え1
一般的な規則は、コマンドがリンク(つまり、ディレクトリエントリ、inodeへのポインタ)で機能する場合、そのコマンドはシンボリックリンクをリンクが指すオブジェクトではなくそれ自体として扱うことです。それ以外の場合、コマンドはシンボリックリンクが指す宛先で機能します。したがって、cp
デフォルトではシンボリックリンクに従い、リンクが指すファイルの内容がコピーされます。ただしcp
、を指定して処理するディレクトリエントリを要求すると、-R
シンボリックリンクのフォローは停止します。 mv
常にディレクトリエントリと連携して動作するため、シンボリックリンクをたどることはありません。
このfind
コマンドの一般的なアクティビティは、ディレクトリエントリに対して機能することであるため、デフォルトではシンボリックリンクに従いません。すべての属性のシンボリックリンクを追跡する-L
理由を追加するfind
とは別にディレクトリ検索をするときに欠かせないものの一つがまさに名前だ。の目的の1つは、ディレクトリエントリで動作し、同じコマンドへの入力を提供するfind -name
ことです。生成された名前がルートと見なされるディレクトリツリーの外側を指すと、不快で驚くべき結果が発生します。mv
rm
find -L dir -name
dir
答え2
-L
確認に使用特性リンクのコンテンツやメタデータではなく、ファイルのコンテンツやメタデータです。たとえば、次の場合はリンクではなくファイルを-atime
確認します。atime
$ find testdir/ -name link -newer testdir/ref
testdir/link
$ find -L testdir/ -name link -newer testdir/ref
$
testdir/link
後で作成されたが指すtestdir/ref
ファイルはそうではありません。