2009-03-17 7 views
12

すべての.svnディレクトリを作業ディレクトリから削除しようとしています。-execを使用すると、私の 'find'の作業がなぜうまくいかないのですか?

私はちょうど見つけて、このようなRM使うだろうと思った:

find . -iname .svn -exec 'rm -rf {}' \; 

しかし、結果は次のとおりです。

検索します。rm -rf ./src/.svn:そのようなファイルやディレクトリはありません

明らかにファイルが存在しているか、見つからない場合は...何が欠けていますか?

+2

可能であれば、findと一緒に-deleteを使用してください。 -deleteまたはrm -rfを使用する場合、-depthとfindを一緒に使用することを忘れないでください。 – ashawley

+0

-deleteのように見えるのは、manページに従って-depthを暗示します。 –

答えて

23

rm -rf {}を一重引用符で囲んではいけません。

あなたが引用したように、シェルはコマンドの引数ではなくコマンドの代わりに-execのすべての引数を扱いますので、"rm -rf ./src/.svn"というファイルを探しています。

試してみてください。

find . -iname .svn -exec rm -rf {} \; 
+0

あなたはどちらも正しいです。私もそれを実感しました。 –

+0

最後に私が使用したのは、正規表現を引用する必要があったgrepのためのものだったと思うので、私はそれを頭の中に入れました。皆さんありがとう! –

+0

私は「必要はありません」と言ったのは、彼が必要と思ったサムのように見えたからです。しかし、私はこれがあいまいで編集していることがわかります。 –

1

次のように、またのsvnコマンドを使用することができます。

svn export <url-to-repo> <dest-path> 

Look here for more infoを。

+0

私はそれを行うことができたと思ったが、私は作業ディレクトリをエクスポートする方法を知らなかった。ありがとう! –

1

find . -iname .svn -exec rm -rf {} \; 

、おそらくがIIRC働くべきことを試してみてください。

7

ただ、複数のファイルを一度に実行できるようにするために、-execを使用するという習慣から逃れるべきです。私は今のMacintoshを使用して、スペースを含むファイル名またはディレクトリ名に遭遇する可能性が高いてるので、例えば、私は彼らに

find . -iname .svn -print | xargs rm -rf 

か、と習慣の外にそれを記述し

find . -iname .svn -print0 | xargs -0 rm -rf 

「xargsの"rm"が "N"ファイルごとに1回だけ呼び出されるようにします。ここでは "N"は通常20です。この場合はrmが小さいので大したことはありませんが、プログラムがすべてのファイル起動時に処理が大量であったり処理が多かったりしたため、処理が大幅に高速化されました。

+0

素晴らしいです。私はxargsのmanページをチェックアウトします、そして記録のために、私はマックにもいます。 w00t! –

+1

また、findの-exec節を "\;"ではなく "¥¥"で終了することもできます。これは-print0を使用し、xargsにパイプすることと同じです。 –

+1

@Adam、それはかなり新しくなければなりませんか? MicroVaxのUltrixの時代にargsを使用して戻ってきたので、「新しい」は「過去15〜20年」を意味するかもしれません。 –

2

多分そのちょうど私が、古い見つける& RMスクリプトが私の現在の設定にない作業を行うには、ラ:

検索/データ/ binに/テスト型D -mtime +10 - 名前 "[0-9] *" -exec rm -rf {} \;を行いxargsのソリューション、ラに対し

検索/データ/ binに/テスト型D -mtime +10 -name '[0-9] *' -print | xargs rm -rf;

全く分からない理由が、私は私のscriptLibを更新しましたので、私は

は(カーネル2.6.18-の下でRHELを実行している....そう単純なもので、私の頭 を破って別のカップルの時間を費やしてはいけません194.11.3.el5)

EDIT:なぜ判明 - )コマンドを壊すwhch(改行に恐ろしいCRを挿入するために、私のRHELディストリビューションのデフォルトVIを - linuxquestions.orgで& jliagreをNX5000からの提案に続いて、コメントを追加〜/ .vimrcに続く:

:設定なFileFormat = UNIX

マップ< F4>:設定なFileFormat = UNIX < CR>

マップ< F5>:設定なFileFormat = DOS < CR>可能

F4/F5でピボットする動作。 CRのは、あなたのファイルに埋め込まれているかどうかをチェックする

ヘッド-1 scriptFile.sh | od -c |ヘッドは-1

http://www.linuxquestions.org/questions/linux-general-1/bad-interpreter-no-such-file-or-directory-213617/

0

次のトリックで、あなたが引用符で欲しいものを渡すことができます。

find . -iname .svn -exec bash -c 'rm -rf {}' \; 

execオプションは、単に引数で実行可能ファイルを呼び出していることを確認させていただきますが、あなたの引数は基本的に任意のサイズと形状のスクリプトが含まれていることができるようになります。

find . -iname .svn -exec bash -c ' 
    ls -l "{}" | wc -l 
' \; 
関連する問題