Как я могу рекурсивно удалить все файлы и каталоги, соответствующие определенному шаблону? например удалить все каталоги ".svn" и содержащиеся в них файлы?
(К сожалению, только DOS)
Как я могу рекурсивно удалить все файлы и каталоги, соответствующие определенному шаблону? например удалить все каталоги ".svn" и содержащиеся в них файлы?
(К сожалению, только DOS)
Поскольку вы ищете решение для DOS, сообщение прошлой недели было почти идентичным, и консенсус был таким:
Командная строка инструмент для рекурсивного удаления папки с указанным именем в Windows?
для / д / р. % d в (.svn) действительно ли @if существует "% d" rd / s / q "% d"
or
для / f "usebackq"% d in ("dir .svn / ad / b / s") do rd / s / q "% d"
Фактически, SVN также дает вам возможность экспортировать рабочий каталог без каталогов .svn / _svn.
Запоздалые мысли, три года спустя: я думаю, что причина, по которой людям в конечном итоге требуется рекурсивное удаление папок .svn / _svn, заключается в том, что они напрямую скопировали свою локальную рабочую копию в новое место, чтобы провести сравнение папок их измененной версии по сравнению с к чистому экспорту, т.е. после того, как что-то пойдет не так с измененной локальной рабочей копией. (По крайней мере, поэтому мне это нужно. Определенно проще / быстрее просто использовать svn export, когда это возможно.)
svn export
), а не только TortoiseSVN, поэтому любой другой клиент тоже может это сделать.
- person MatrixFrog; 15.06.2010
Это Юникс или Винда? В Unix простое решение:
find . -name '.svn' -type d | xargs rm -rf
Выполняется рекурсивный поиск всех каталогов (-тип d) в иерархии, начиная с "." (текущий каталог) и находит те, чье имя - '.svn'; список найденных каталогов затем передается в rm -rf для удаления.
Если вы хотите попробовать, попробуйте
find . -name '.svn' -type d | xargs echo
Это должно предоставить вам список всех каталогов, которые будут рекурсивно удалены.
-print0
и NUL
прерывание в подобных ситуациях, иначе это просто катастрофа, ожидающая своего часа.
- person TC1; 29.03.2012
NULL
и косой черты в их. Пробелы - вредная вещь для этого, пример с пробелом в имени будет иметь каталог с именем foo bar
где-то в иерархии и каталог с именем bar
в текущем каталоге. Затем вы выполняете поиск foo*
, он передает some/path/foo bar
на rm
, который молча терпит неудачу и удаляет bar
. См. Ответ greyfade ниже или используйте -delete
для поиска GNU.
- person TC1; 16.02.2013
-print0
или -0
, и мне было трудно найти документацию. на Mac так много (большинство?) файлов / каталогов содержат пробелы ... так что ваш комментарий вызвал у меня любопытство. #funwithunix
- person Meltemi; 16.02.2013
find . -name '.svn' -type d -exec rm -rf '{}' +
как бы загадочно, но работает ...
- person Meltemi; 16.02.2013
rm
- просто самый очевидный плохой. В этом случае, когда есть пробел, это то же самое, что выполнение rm -rf foo/bar baz
- как только вы его запишете, это очевидно. Поскольку Darwin (Mac) технически является Unix, вы сможете найти документацию по вашему find
в man
, введите man find
в оболочке. P.S. Ваш случай, вероятно, ведет себя забавно, если в имени файла есть апостроф. :)
- person TC1; 16.02.2013
Если ваши файлы находятся в состоянии подрывной деятельности, то при экспорте из репозитория вы получите дерево каталогов с удаленными .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\
И так далее...