2

/home/zzz/home/zzz/bash で使用する場合の違いは何ですか?

/home/zzzwhenが別のディレクトリへのリンクである場合、find /home/zzz -type f何も取得されませんが、find /home/zzz/ -type fそのディレクトリの下にあるすべてのファイルが返されることがわかりました。/home/zzzbashはリンクタイプのファイルを扱うと思いますが/home/zzz/、この場合はディレクトリです。

他に違いはありますか?

4

2 に答える 2

3

末尾のスラッシュは、ほとんどの Unix ユーティリティ (findこの場合) によって「シンボリック リンクをたどる」ことを意味すると解釈されます。

POSIXシンボリックリンク仕様から:

パス名の最後の構成要素がシンボリック リンクである場合、標準では、末尾のスラッシュによってリンクがたどられるようにする必要があります。これは、歴史的な実装の動作です。たとえば、/a/bおよび/a/b/の場合、 /a/bがディレクトリへのシンボリック リンクである場合、 /a/ bはシンボリック リンクを参照し、 /a/b/はディレクトリを参照しますシンボリックリンクが指すもの。

GNU Coreutils: 末尾のスラッシュも参照してください。

于 2012-11-20T09:15:52.990 に答える
1

それはbashではありません.シンボリックリンクをシンボリックリンクとして扱い、それ自体からプロパティを読み取る人を見つけます.それが指すファイルからプロパティを読み取らない. find(1)の内容を参照してください。

シンボリック リンクをたどらないでください。これがデフォルトの動作です。find がファイルの情報を検査または出力するときに、ファイルがシンボリック リンクである場合、使用される情報はシンボリック リンク自体のプロパティから取得されます

それをディレクトリとして扱うには、-Lオプションを使用する必要があります。

-L オプションが有効な場合、-type 述語は、(シンボリック リンクが壊れていない限り) リンク自体ではなく、シンボリック リンクが指すファイルのタイプに対して常に一致します。-L を使用すると、-lname および -ilname 述語は常に false を返します。

私の推測では、末尾のスラッシュを渡すと、/bash はそれを解決しようとし、それをディレクトリとして認識します。ディレクトリ ツリーに再帰的なシンボリック リンクがないことが確実な場合はfind-Lオプションで呼び出すことができます。したがって、次のコマンドが機能するはずです。

find -L /home/zzz -type f
于 2012-11-20T09:10:34.140 に答える