-Lで使用法を見つける


34

私が持っています

link -> file

私がやります

find -L . -name 'link'

そして得る

./link

何故ですか?

男は言う:

-L:シンボリックリンクをたどります。findがファイルに関する情報を検査または印刷する場合、使用される情報は、リンク自体からではなく、リンクが指すファイルのプロパティから取得されます(壊れたシンボリックリンクまたはfindがファイルを検査できない場合を除く)リンクが指す)。

回答:


12

では-L、ファイルのプロパティを調べます-リンクのプロパティではなく、コンテンツまたはメタデータです。たとえば、を使用-atimeするとatime、リンクではなくファイルのチェックが行われます。

$ find testdir/ -name link -newer testdir/ref
testdir/link
$ find -L testdir/ -name link -newer testdir/ref
$

testdir/linkは後に作成されましたtestdir/refが、それが指すファイルはそうではありませんでした。


1
私の例を挙げて説明してもらえますか?私が理解しているのはこれです:私の例では、findは検索を開始します。-Lが有効であるため、。/ linkを参照し、。/ linkのプロパティを取得します。./fileの名前をパターン 'link'と比較し、一致しないため、o / pを報告しないでください。私の推論の何が問題なのですか?
アンクールアガルワル

あなたが引用した検索マニュアルから、「使用される情報は、リンクが指すファイルのプロパティから取得されるものとします。」ファイルの名前はそのプロパティの1つではないため、リンクの名前が引き続き使用されます。また、実際のファイルの名前よりもはるかに便利です。
ケビン

「ファイルの名前はそのプロパティの1つではありません」私はそれを知りませんでした。プロパティと見なされないファイルのその他の属性はありますか?正直に言うと、私はまだ懐疑的で、他の人が言わなければならないことを待ちます。
アンクルアガルワル

@abcと同じですが、ファイル名がファイルプロパティではないことを知りませんでした。ドキュメントやマニュアルページでこの情報をどこで見つけることができますか?ファイルプロパティの詳細については、こちらをご覧ください。
ジョーカー

34

一般的な規則は、コマンドがリンク(iノードへのポインタであるディレクトリエントリ)で動作する場合、コマンドはリンクが指すオブジェクトとしてではなく、シンボリックリンクをそれ自体として扱うことです。それ以外の場合、コマンドはシンボリックリンクが指すものに対して動作します。したがってcp、デフォルトではシンボリックリンクをたどり、リンクが指すファイルの内容をコピーします。ただし、をcp指定してディレクトリエントリを処理するように要求すると-R、シンボリックリンクの追跡が停止します。 mv常にディレクトリエントリで機能するため、シンボリックリンクをたどることはありません。

findコマンドの正常な活動は、ディレクトリエントリを操作するので、シンボリックリンクは、デフォルトでは続きません。ディレクトリ検索を実行するときに無視できないプロパティを除くすべてのプロパティの名前のシンボリックリンクをたどる-L原因findを追加します。の目的の1つは、ディレクトリエントリを操作するやなどのコマンドに入力を提供することです。をルートとするディレクトリツリーの外部を指す名前を生成できた場合、不快で驚くべき結果が得られます。find -namemvrmfind -L dir -namedir


うわー!なぜこの微妙な概念がマニュアルページでうまく説明されていないのか(私が見逃していない限り)?これは私にとって大きな驚きです。
アンクルアガル

2
@Kyle Jones There would be unpleasant and surprising results if find -L dir -name`は、dirをルートとするディレクトリツリーの外側を指す名前を生成する可能性があり find dir -name patternます。-Lを追加すると、外部ディレクトリを指すことができるため
timotheecour

それではcp -R、シンボリックリンクの下にあるものをコピーする方法は ?
javadba
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.