Командная строка для рекурсивного удаления соответствующих файлов и каталогов - PullRequest
30 голосов
/ 11 февраля 2009

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

(к сожалению, только для DOS)

Ответы [ 6 ]

56 голосов
/ 11 февраля 2009

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

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

для / д / р. % d в (.svn) действительно существует, если @ "% 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', когда это возможно.)

18 голосов
/ 11 февраля 2009

Это Unix или Windows? В Unix простое решение -

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

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

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

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

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

7 голосов
/ 11 февраля 2009

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

6 голосов
/ 11 февраля 2009

Нечто подобное может сработать, но, конечно, будьте осторожны с этим!

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

Сначала попробуйте что-нибудь подобное, чтобы выполнить пробный прогон:

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

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

5 голосов
/ 11 февраля 2009

На * NIX или Cygwin:

find -name .svn -print0 | xargs -0 rm -rf
1 голос
/ 08 июля 2010

Если вы хотите скопировать его без экспорта и удаления .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\

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

...