Как я могу рекурсивно удалить все файлы и каталоги, соответствующие определенному шаблону? например удалить все ".svn" каталоги и файлы, которые они содержат?
(Только для печально DOS)
Как я могу рекурсивно удалить все файлы и каталоги, соответствующие определенному шаблону? например удалить все ".svn" каталоги и файлы, которые они содержат?
(Только для печально DOS)
Поскольку вы ищете решение для 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", когда это возможно.)
Это Unix или Windows? В Unix легкое решение
find . -name '.svn' -type d | xargs rm -rf
Здесь выполняется поиск рекурсивно для всех каталогов (-type d) в иерархии, начиная с "." (текущий каталог) и находит тех, чье имя ".svn"; список найденных каталогов затем подается на rm -rf для удаления.
Если вы хотите попробовать, попробуйте
find . -name '.svn' -type d | xargs echo
Это должно предоставить вам список всех каталогов, которые будут рекурсивно удалены.
Если ваши файлы находятся в subversion, то выполнение экспорта из репозитория даст вам дерево каталогов с файлами .svn и любым другим удаленным рывком.
Что-то вроде этого может сделать трюк, но, конечно, будьте осторожны с ним!
find . -name ".svn" -exec rm -rf {} \;
Попробуйте что-то вроде этого сначала сделать сухой пробег:
find . -name ".*" -exec echo {} \;
Обратите внимание, что пустые фигурные скобки заполняются именами файлов, а побеленная точка с запятой заканчивается командой, которая выполняется (начиная с "-exec" ).
Вкл. * nix или Cygwin:
find -name .svn -print0 | xargs -0 rm -rf
Если вы хотите скопировать его, не экспортируя и не удаляя .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\
И так далее...