私が持っています
link -> file
私がやります
find -L . -name 'link'
そして得る
./link
何故ですか?
男は言う:
-L:シンボリックリンクをたどります。findがファイルに関する情報を検査または印刷する場合、使用される情報は、リンク自体からではなく、リンクが指すファイルのプロパティから取得されます(壊れたシンボリックリンクまたはfindがファイルを検査できない場合を除く)リンクが指す)。
私が持っています
link -> file
私がやります
find -L . -name 'link'
そして得る
./link
何故ですか?
男は言う:
-L:シンボリックリンクをたどります。findがファイルに関する情報を検査または印刷する場合、使用される情報は、リンク自体からではなく、リンクが指すファイルのプロパティから取得されます(壊れたシンボリックリンクまたはfindがファイルを検査できない場合を除く)リンクが指す)。
回答:
では-L
、ファイルのプロパティを調べます-リンクのプロパティではなく、コンテンツまたはメタデータです。たとえば、を使用-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
を追加します。の目的の1つは、ディレクトリエントリを操作するやなどのコマンドに入力を提供することです。をルートとするディレクトリツリーの外部を指す名前を生成できた場合、不快で驚くべき結果が得られます。find -name
mv
rm
find -L dir -name
dir
There would be unpleasant and surprising results if
find -L dir -name`は、dirをルートとするディレクトリツリーの外側を指す名前を生成する可能性があり find dir -name pattern
ます。-Lを追加すると、外部ディレクトリを指すことができるため
cp -R
、シンボリックリンクの下にあるものをコピーする方法は ?