このコマンドを実行すると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
在庫:
これがシステムの問題ですかfind
、ls
それとも私のシステムの問題ですか?それともこれが予想され、まったく問題になりませんか? 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