シンボリックリンクパスで機能しないものが見つかりましたか?

シンボリックリンクパスで機能しないものが見つかりましたか?

このコマンドを実行するとfind $HOME/MySymlinkedPath -name "run*.sh"何も起こらず、エラーも表示されません(「MySymlinkedPath」は$ HOME以外のハードドライブへのシンボリックリンクパスです)。

これらも失敗します:

find ~/MySymlinkedPath -name "run*.sh"
find /home/MyUserName/MySymlinkedPath -name "run*.sh"

確実にするために、この存在しないパスは失敗するので(もちろん)パスがfind $HOME/MySymlinkedPathDUMMYTEST -name "run*.sh"見つかりますが(エラーが発生しないため)、そのパスのfind検索が行われないので、今はよくわかりません。

cd $HOME/MySymlinkedPathこのようにパス参照を最初に削除する場合にのみ機能しますfind -name "run*.sh"が、私のスクリプトにはうまくいきません。

追加情報
このコマンドは通常どおりに機能しますls $HOME/MySymlinkedPath/run*.sh。そこに行ってcd $HOME/MySymlinkedPath実行すると、ls ..結果は期待したものとは異なります。つまり、シンボリックリンクパスがあるパスのリストです。他のメディア/ハードドライブの物理パスのリストを返します! ! !

pwd -P
/media/MediaIdentifier/RealPath
pwd
/home/MyUser/MySymlinkedPath

在庫
これがシステムの問題ですかfindlsそれとも私のシステムの問題ですか?それともこれが予想され、まったく問題になりませんか? Ubuntu 12.10を使用しています。私がテストしたすべての端末で失敗するので、端末は「問題」ではないようです。

答え1

ここそれが答えです。しかし、この質問はbashが質問の対象であることを指摘しています。

説明がfind見つかりました"$HOME/MySymlinkedPath"。ディレクトリではなくシンボリックリンクなので、再帰的な立ち下がりはそこで終わります。式が一致すると"$HOME/MySymlinkedPath"(例:からfind "$HOME/MySymlinkedPath" -name 'My*')、find一致として印刷されます。

そこで指摘したように、この問題を処理し、すべてのスクリプトを修正する最も簡単でクリーンな方法は次のとおりです。

find "$HOME/MySymlinkedPath" -name "run*.sh"

findシンボリックリンクから開始せずにシンボリックリンクのターゲットから開始するようにスラッシュを追加するだけです。

find "$HOME/MySymlinkedPath/" -name "run*.sh"

または-H、オプションを渡してfind(パスの前に最初に表示する必要があります)、コマンドラインに渡されたシンボリックリンクを通過するように指示します。 (これは、再帰降下中に発生するシンボリックリンクを通過する-L指示とは異なります。)find

find -H "$HOME/MySymlinkedPath" -name "run*.sh"

結局、ここで最もうまくいきました-L(フォルダシンボリックリンクを介してシンボリックリンクされた複数のファイルシステムがあったため)。ただし、問題なく多くのエラーメッセージが生成されたため、2>/dev/null次のエイリアスを追加することにしましたalias find='find -L'

find -L "$HOME/MySymlinkedPath" -name "run*.sh" 2>/dev/null

関連情報