Как рекурсивно удалить все файлы SVN с помощью PowerShell

Как можно удалить все файлы Subversion из каталога с помощью PowerShell?


person epitka    schedule 05.02.2010    source источник
comment
возможно, это неприменимо, но можно создать копию вашего кода из вашего репозитория без присутствующих артефактов подрывной деятельности. например используя TortoiseSVN, вы можете использовать «экспорт SVN»   -  person Adam Ralph    schedule 05.02.2010


Ответы (4)


Если вы действительно хотите просто удалить каталоги .svn, это может помочь:

gci c:\yourdirectory -include .svn -Recurse -Force | 
   Remove-Item -Recurse -Force

Изменить: добавлен параметр -Force в gci для отображения скрытых каталогов и сокращен код.

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

person stej    schedule 05.02.2010
comment
есть ли причина, по которой мы не можем рекурсивно исключить файлы svn при копировании? Я попробовал Copy-Item $ source -Destination $ dest -Recurse -Exclude '.svn'. Но это не сработало. Я скопировал его полностью, а затем рекурсивно удалил файлы .svn с помощью этой команды. - person gprasant; 23.11.2011
comment
Не работает. Думаю, это тот же случай, что и при использовании Get-ChildItem dir -recurse -exclude ... -exclude (и, насколько я правильно помню, также -include) не очень хорошо работает с -recurse. - person stej; 23.11.2011
comment
У меня отлично работает. Спасибо - person yang-qu; 12.12.2011
comment
на всякий случай, если кто-то найдет это и возникнет аналогичная проблема. этот ответ помог мне удалить тонну файлов thumbs.db и очистить представление о различиях. Мне больше нравится псевдоним dir * -recurse -include thumbs.db | del -recurse -force - person Brian Boatright; 05.02.2012
comment
Когда я попробовал, gci не понравился параметр -force, но, похоже, он работал без него (Powershell 4.0). - person Nigel Ellis; 29.03.2014

Предполагая, что вы не хотите удалять какие-либо файлы, которые также могут иметь расширение .svn:

Get-ChildItem $path -r -include .svn -Force | Where {$_.PSIsContainer} |
    Remove-Item -r -force

Microsoft ответила на предложение в комментариях ниже, которые Кейт открыл на MS Connect! Начиная с PowerShell V3, вы можете избавиться от лишнего (очень медленного) канала для Where {$_.PSIsContainer} и использовать вместо него -directory:

gci $path -r -include .svn -force -directory | Remove-Item -r -force

PowerShell v3 можно загрузить для Windows 7 на странице Windows Management Framework 3.0.

person Keith Hill    schedule 05.02.2010
comment
Да, неплохой улов :) Однако я не думаю, что есть какой-то файл с таким расширением. - person stej; 06.02.2010
comment
Я никогда не использовал Subversion (только ClearCase и TFS), поэтому не был уверен. - person Keith Hill; 06.02.2010
comment
Кстати, я с нетерпением жду того дня, когда вам не понадобится Where {$_.PSIsContainer}, и все, что вам нужно сделать, это gci . -r -containerOnly. У меня есть прокси Get-ChildItem для работы таким образом, но я не могу рассчитывать на то, что он есть у других людей. :-( - person Keith Hill; 06.02.2010
comment
Вы добавили предложение о подключении -containerOnly? Я бы проголосовал точно. - person stej; 06.02.2010
comment
Я бы потерял подстановочный знак в шаблоне и просто сделал бы .svn - иначе вы получите папки, которые заканчиваются на .svn - person Duncan Smart; 06.02.2010
comment
Stej, да, проголосуйте за это здесь: connect.microsoft.com/PowerShell/feedback/details/308796/ - person Keith Hill; 06.02.2010
comment
Ах, значит, каталоги не называются как foo.svn, они буквально называются .svn? А как насчет файлов? Существуют ли файлы с расширением .svn или у них есть такие имена, как foo.svn? - person Keith Hill; 06.02.2010
comment
Кейт, и вы, и стей включили аргумент -recurse в командлет remove-item. Это действительно необходимо? Я пробовал без него, и это сработало, что кажется логичным, поскольку remove-item будет работать с тем, что он передается через конвейер? Но тот факт, что вы оба включили это в свой пример, заставляет меня задуматься. Я что-то упускаю или прав, что вторая рекурсия не нужна? Сет - person Seth Spearman; 24.10.2011
comment
Не думаю, что это нужно. Я наверное добавил это просто по привычке. :-) - person Keith Hill; 25.10.2011
comment
@SethSpearman Вы можете оставить -r вне канала remove-item, но это приведет к тому, что вы уверены, что хотите рекурсивно удалять элементы? [y] [n] предупреждение КАЖДЫЙ раз он повторяется ... так что лучше явно добавить -r. - person Bradley Mountford; 10.01.2013

Как насчет использования SVN Export для получения чистая касса без каталогов .svn?

Изменить

Вы можете посмотреть ответ здесь:

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

person Sofahamster    schedule 05.02.2010
comment
Невозможно этого сделать, это код с другой машины, это беспорядок. - person epitka; 05.02.2010

Ответ stej правильный, если вы не хотите удалить все файлы с определенной строкой в ​​их имени. В этом случае вам следует использовать:

gci "your_path" -include \*"specific_string"\* -Recurse -Force | Remove-Item -Recurse -Force

Примечания:
your_path требует кавычек, только если они содержат пробелы или специальные символы.

specific_string требует кавычек, чтобы убедиться, что оба символа подстановки распознаются, особенно если строка включает такие символы, как ().

person Dreamingwolf    schedule 11.08.2018