シンボリックリンクされたパスでは機能しないのですか?


15

このコマンドを実行して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
私はより良い答えを見つける「フォロー-見つける」。stackoverflow.com/questions/105212/...
Jarod

@Jarodのmanページには、-followは非推奨であり、以下の私の回答のように-L(これも--followです)を使用する必要があると記載されています:>
Aquarius Power

回答:


20

これが答えです。しかし、その質問は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

2
私見、ディレクトリの後にスラッシュを使用して、それらが実際にディレクトリであることを示すことは、一般的に良い習慣です。:)物事をより読みやすくするなど
dannysauer 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.