特定のパターンに一致するすべてのファイルとディレクトリを再帰的に削除するにはどうすればよいですか?例えばすべての「.svn」ディレクトリとそこに含まれるファイルを削除しますか?
(悲しいことにDOSのみ)
DOSソリューションを探しているので、先週の投稿はほとんど同じで、コンセンサスは次のとおりでした。
Windowsで指定した名前のフォルダーを再帰的に削除するコマンドラインツール
/ d/rの場合。 (.svn)に%d存在する場合@存在する場合 "%d" rd/s/q "%d"
または
/ f "usebackq"%dの場合( "dir .svn/ad/b/s")rd/s/q "%d"を実行
実際、SVNには、.svn/_svnディレクトリなしで作業ディレクトリをエクスポートするオプションもあります。
後から考えて、3年後:.svn/_svnフォルダーを再帰的に削除する必要があるのは、変更されたバージョンのフォルダー比較を行うために、ローカルの作業コピーを新しい場所に直接コピーしたためですクリーンなエクスポート、つまり、変更されたローカル作業コピーで問題が発生した後。 (少なくとも、それが私がそれを必要とした理由です。可能であれば、「svn export」を使用するほうが間違いなく簡単/高速です。)
これはUnixまたはWindowsですか? Unixでは、簡単な解決策は
find . -name '.svn' -type d | xargs rm -rf
これは、「。」で始まる階層内のすべてのディレクトリ(タイプd)を再帰的に検索します。 (現在のディレクトリ)、名前が「.svn」であるものを見つけます。見つかったディレクトリのリストは、削除のためにrm -rfに送られます。
試してみたい場合は、
find . -name '.svn' -type d | xargs echo
wouldが再帰的に削除されるすべてのディレクトリのリストが表示されます。
ファイルがSubversionにある場合、リポジトリからエクスポートすると、.svnファイルとその他の残骸が削除されたディレクトリツリーが表示されます。
このようなことがうまくいくかもしれませんが、もちろん注意してください!
find . -name ".svn" -exec rm -rf {} \;
最初に次のようなことを試して、予行演習を行います。
find . -name ".*" -exec echo {} \;
空の括弧はファイル名で埋められ、エスケープされたセミコロンは実行されるコマンドを終了することに注意してください( "-exec"の後に開始)。
* nixまたはCygwinの場合:
find -name .svn -print0 | xargs -0 rm -rf
プロジェクトから.svnをエクスポートおよび削除せずにコピーする場合は、XCOPYの/ EXCLUDEオプションを使用することをお勧めします。
このような:
xcopy /S/Q/EXCLUDE:svn.excludelist [path_from] [path_to\]
[path_to]の「\」(バックスラッシュ)を確認します。それが出力ディレクトリであると判断するので、xcopyはそれがファイルであるかディレクトリであるかを問いません。
Svn.excludelistは、コピーで無視するパターンを行で区切ったテキストファイルです。
例えば:
.svn
.svn\
\.svn\
.obj
.o
.lib
\src\
等々...