私が持っています
link -> file
私がやります
find -L . -name 'link'
そして得る
./link
何故ですか?
男は言う言う:
-L:シンボリックリンクをたどります。 findがファイルに関する情報を検査または出力する場合、使用される情報は、リンク自体からではなく、リンクが指すファイルのプロパティから取得されます(壊れたシンボリックリンクであるか、findがファイルを検査できない場合を除く)リンク先)。
-L
を使用すると、ファイルのpropertiesが検査されます。リンクの内容ではなく、コンテンツまたはメタデータが検査されます。例えば。 -atime
を使用すると、リンクではなくファイルのatime
がチェックされます。
$ find testdir/ -name link -newer testdir/ref
testdir/link
$ find -L testdir/ -name link -newer testdir/ref
$
testdir/link
はtestdir/ref
の後に作成されましたが、それが指すファイルは作成されませんでした。
一般的なルールは、コマンドがリンク(つまり、iノードへのポインタであるディレクトリエントリ)を操作する場合、コマンドはシンボリックリンクを、リンクが指すオブジェクトとしてではなく、それ自体として扱うことです。それ以外の場合、コマンドはシンボリックリンクが指すものを操作します。したがって、cp
はデフォルトでシンボリックリンクをたどり、リンクが指すファイルの内容をコピーします。ただし、cp
に-R
を指定してディレクトリエントリを処理するように要求すると、シンボリックリンクの追跡が停止します。 mv
は常にディレクトリエントリで機能するため、シンボリックリンクをたどることはありません。
find
コマンドの通常のアクティビティはディレクトリエントリを操作することであるため、シンボリックリンクはデフォルトでは追跡されません。 -L
を追加すると、find
がすべてのプロパティのシンボリックリンクをたどりますexceptディレクトリ検索を行うときに無視できないもの、名前。 find -name
の目的の1つは、ディレクトリエントリを操作するmv
やrm
などのコマンドに入力を提供することです。 find -L dir -name
がdir
をルートとするディレクトリツリーの外部を指す名前を生成できるとしたら、不愉快で驚くべき結果になるでしょう。