なぜ、再帰的にすべての.svnフォルダなぜ|見つけるとうまくいかない?
find . -name ".svn" | rm -rfv
を削除することを目指し、次のコマンドは動作しませんでしょうか?
私はfind
コマンドがこの問題を解決するために-exec
オプションを提供していることを知っていますが、何が起こっているのかを理解したいだけです。
なぜ、再帰的にすべての.svnフォルダなぜ|見つけるとうまくいかない?
find . -name ".svn" | rm -rfv
を削除することを目指し、次のコマンドは動作しませんでしょうか?
私はfind
コマンドがこの問題を解決するために-exec
オプションを提供していることを知っていますが、何が起こっているのかを理解したいだけです。
たとえば、find
の結果はrm
のSTDINに渡されます。しかしrm
はその引数をSTDINで期待していません。
Hereは、入力リダイレクトがどのように機能するかの例です。
rmが標準入力ストリーム上のファイル名のリストを受け入れないため、これは機能しません。
ただ、参考のために、スペースが含まれている可能性があるディレクトリの場合にこれを処理する最も安全な方法は次のとおりです。
find . -name .svn -exec rm -frv {} \;
それとも、あなたはスピードのために撮影している場合:あなたは
find . -name .svn -print0 | xargs -0 rm -frv
そして、あなたは質問の**残り**読む場合:*「私は 'find'コマンドは、この問題を解決するために、' -exec'オプションを提供して知っているが、私はちょうどであるかを理解したいとそこで起きている "。 **編集**:さて、あなたはそれを処理するのに十分な編集をしました。 –
'-exec rm -frv {} +'がプロセスが最も少ないので、(テストなしで) '-exec rm -frv {} +'が最速であると期待します。 –
rm
標準入力からファイル名を読み込まないため、パイプされたデータはすべて無視されます。
標準入力を使用する唯一の方法は、端末であるかどうかを確認することで、プロンプトを出すかどうかを判断できます。
find do works with | (例:find ~ -name .svn | grep "a"
)が問題です。rm
正確に。これは、 'grep' *がSTDINからの入力を期待しているのに対し、' rm'はパイプされたものを無視してパラメータを必要とするからです。 –
この質問はこの他の回答と似ています。お役に立てれば。
最後に!誰かが実際に質問に答えます! –
それぞれの返信がその理由に答えますが、一部は少しわかりにくいです。 – reinierpost