bashがディレクトリとは異なる方法でシンボリックリンクを完成させるのはなぜですか?

bashがディレクトリとは異なる方法でシンボリックリンクを完成させるのはなぜですか?

私はソースコードを検索するときに主にfind環境変数をパスとして使用します。最近、環境変数をシンボリックリンクに置き換えました。これにより、Bashのシェルの完成が中断されました。シンボリックリンクを使用すると機能しfindませんが、シンボリックリンクが指す実際のパスを使用して見つけることができます。

ln -s /some/source/dir /the/source
export SYMLINK=/the/source
export DIR=/some/source/dir

find $SYMLINK -name file.c        // doesn't find anything
find $DIR -name file.c            // works as expected

この例では、$ SYMLINKは$ DIR値へのシンボリックリンクです。

それでは、BashがSymlink環境変数を異なる方法で処理するのはなぜですか?

ベストアンサー1

これは bash ではなく find です。ほとんどのユーティリティが同じ原則に従うことがわかります。

  • ファイルの内容を操作する場合、通常のファイルへのシンボリックリンクは実際のファイルと同じです。
  • ディレクトリエントリに対して操作を実行する場合、シンボリックリンクは独自のカテゴリです。

これを実行すると、ディレクトリではなくfind $SYMLINKオブジェクトfindが表示されるため、ディレクトリに移動しません。ディレクトリへのシンボリックリンクをそのディレクトリとして扱うには、/末尾にを追加します(一部の破損したシステムまたはコマンドにはこれが必要な場合があります"$SYMLINK/.")。

find "$SYMLINK/" -name file.c

場合は、ターゲットを指定したように、コマンドラインからすべてのシンボリックリンクを処理するように指示するfindこのオプションを使用することもできます。-H

find -H "$SYMLINK" -name file.c

おすすめ記事