Командная строка для рекурсивного удаления совпадающих файлов и каталогов

Как я могу рекурсивно удалить все файлы и каталоги, соответствующие определенному шаблону? например удалить все ".svn" каталоги и файлы, которые они содержат?

(Только для печально DOS)

Ответ 1

Поскольку вы ищете решение для DOS, сообщение на прошлой неделе было почти идентичным, и консенсус был следующим:

Инструмент командной строки для удаления папки с указанным именем рекурсивно в Windows?

для/d/r. % d in (.svn) do @if существуют "% d" rd/s/q "% d"

или

для/f "usebackq" % d in ( "dir.svn /ad/b/s " ) do rd/s/q "% d"

Собственно, SVN также предоставляет вам возможность экспортировать рабочий каталог без каталогов .svn/_svn.

Последующие мысли, три года спустя: Я думаю, причина, по которой людям приходится рекурсивно удалять папки .svn/_svn, состоит в том, что они непосредственно скопировали свою локальную рабочую копию в новое место, чтобы сравнить папки с их модифицированной версией по сравнению с чистым экспортом, т.е. после чего что-то пойдет наперекосяк с измененной локальной рабочей копией. (По крайней мере, именно поэтому мне это нужно. Определенно проще и быстрее использовать "svn export", когда это возможно.)

Ответ 2

Это Unix или Windows? В Unix легкое решение

find . -name '.svn' -type d | xargs rm -rf

Здесь выполняется поиск рекурсивно для всех каталогов (-type d) в иерархии, начиная с "." (текущий каталог) и находит тех, чье имя ".svn"; список найденных каталогов затем подается на rm -rf для удаления.

Если вы хотите попробовать, попробуйте

find . -name '.svn' -type d | xargs echo

Это должно предоставить вам список всех каталогов, которые будут рекурсивно удалены.

Ответ 3

Если ваши файлы находятся в subversion, то выполнение экспорта из репозитория даст вам дерево каталогов с файлами .svn и любым другим удаленным рывком.

Ответ 4

Что-то вроде этого может сделать трюк, но, конечно, будьте осторожны с ним!

find . -name ".svn" -exec rm -rf {} \;

Попробуйте что-то вроде этого сначала сделать сухой пробег:

find . -name ".*" -exec echo {} \;

Обратите внимание, что пустые фигурные скобки заполняются именами файлов, а побеленная точка с запятой заканчивается командой, которая выполняется (начиная с "-exec" ).

Ответ 5

Вкл. * nix или Cygwin:

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

Ответ 6

Если вы хотите скопировать его, не экспортируя и не удаляя .svn из проектов, вы можете использовать параметр /EXCLUDE из XCOPY.

Вот так:

xcopy /S/Q/EXCLUDE:svn.excludelist [path_from] [path_to\]

Обратите внимание на "\" (обратная косая черта) на [path_to]. Он определяет, что это выходной каталог, поэтому xcopy не будет подвергать сомнению, является ли он файлом или каталогом.

svn.excludelist - это текстовый файл, содержащий шаблоны для игнорирования копии, разделенной линией.

Пример:

.svn
.svn\
\.svn\
.obj
.o
.lib
\src\

И так далее...