web-dev-qa-db-ja.com

-Lで使用法を見つける

私が持っています

link -> file

私がやります

find -L . -name 'link'

そして得る

./link

何故ですか?

男は言う言う:

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

35
Ankur Agarwal

-Lを使用すると、ファイルのpropertiesが検査されます。リンクの内容ではなく、コンテンツまたはメタデータが検査されます。例えば。 -atimeを使用すると、リンクではなくファイルのatimeがチェックされます。

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

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

12
Kevin

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

findコマンドの通常のアクティビティはディレクトリエントリを操作することであるため、シンボリックリンクはデフォルトでは追跡されません。 -Lを追加すると、findがすべてのプロパティのシンボリックリンクをたどりますexceptディレクトリ検索を行うときに無視できないもの、名前。 find -nameの目的の1つは、ディレクトリエントリを操作するmvrmなどのコマンドに入力を提供することです。 find -L dir -namedirをルートとするディレクトリツリーの外部を指す名前を生成できるとしたら、不愉快で驚くべき結果になるでしょう。

36
Kyle Jones