ターミナルを使用してすべての.svnフォルダーを再帰的に削除する方法は?


56

.svnフォルダー内のすべてのフォルダー(およびすべてのサブディレクトリーから)を削除できますが、それ以外は削除できないように、ターミナルに入力できるコマンドは何ですか?


たぶんあなたはsvn export path/to/repo path/to/export/to代わりに
...-ジョニー

メモsvn exportは、svnの一部ではないファイル間でコピーしないということです。たとえば、PodsフォルダーをコミットしないCocoa Podsを使用するiOSアプリケーションに対してこれを実行したかったのです。これは、出力からスキップされました。結局、私が望んでいたことに対するリッチの答えに似たものを使用することになりました。
jackofallcode

回答:


120
cd to/dir/where/you/want/to/start
find . -type d -name '.svn' -print -exec rm -rf {} \;
  • 再帰を行うfindを使用します
  • 現在のディレクトリ。
  • ファイルタイプはディレクトリです
  • ファイル名は.svnです
  • この時点までに一致したものを出力します(.svn dirs)
  • コマンドを実行しrm -rf (thing found from find)ます。{}は見つかったエンティティのプレースホルダーです
  • ; execのコマンドが実行されたことを検出します。シェルには何のアイデアもあるので。シェルが特別なことをしないように\でエスケープする必要があり、単にfindに渡されます

2
良い解決策。一方でfindあり-delete、それは非空のディレクトリを削除しません。このアプローチは、たとえば、ファイルのパス全体の一部と一致し始めるよりも簡潔です。
ダニエルベック

13
-exec rm -rf {} \;必要なものだけを見つけられるようにするために、初めて実行せずに実行することをお勧めします。常に最初にチェックするため、間違って間違ったものを削除してしまうという問題は一度もありません。
ロブ

2
@Robの良い点、私は通常-exec echo rm -rf {} \; その後、エコーを除去します。
リッチホモルカ

あまり多くない場合の別のオプションは、各ファイルの削除を確認することです-exec rm -ri {} \;
-doovers

4
-exec rm -rf {} +あまりにも多くのrmインスタンスを起動する必要がないため、おそらく何倍も高速です。代わりに、1回の呼び出しで最大量の引数(この場合は削除するディレクトリ)をパックします。これは、rm複数の引数を受け入れるため可能です。
ダニエルB
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.