Como usar o Terminal para excluir todas as pastas .svn recursivamente?

56

Qual comando posso digitar no Terminal para excluir todas as .svnpastas de uma pasta (e de todos os subdiretórios), mas não excluir mais nada?

Mikey
fonte
Talvez você possa apenas svn export path/to/repo path/to/export/to...
Jonny
Uma observação svn exporté que isso não copia arquivos que não fazem parte do svn. Por exemplo, eu queria fazer isso em um aplicativo iOS que usa o Cocoa Pods em que não confirmamos a pasta Pods. Isso foi pulado da saída. Acabei usando algo semelhante à resposta de Rich para o que queria.
jackofallcode

Respostas:

120
cd to/dir/where/you/want/to/start
find . -type d -name '.svn' -print -exec rm -rf {} \;
  • Use find, que faz recursão
  • no diretório atual.
  • tipo de arquivo é diretório
  • nome do arquivo é .svn
  • imprima o que corresponde a este ponto (os diretórios .svn)
  • exec o comando rm -rf (thing found from find). o {} é um espaço reservado para a entidade encontrada
  • a ; diz achar que o comando para exec é feito. Uma vez que o shell também tem uma idéia do que; é, você precisa escapá-lo com \ para que o shell não faça nada de especial com ele e apenas passe para encontrar
Rich Homolka
fonte
2
Boa solução. Enquanto findtiver, -deleteele não excluirá diretórios não vazios. Essa abordagem é mais limpa do que, por exemplo, começar a combinar partes de todo o caminho dos arquivos.
Daniel Beck
13
Eu recomendo executá-lo sem a -exec rm -rf {} \;primeira vez para garantir que ele encontre apenas o que você deseja. Eu nunca tive um problema em que excluí acidentalmente a coisa errada, porque sempre verifico primeiro.
Rob
2
@ Rob bom ponto, eu costumo fazer -exec echo rm -rf {} \; depois remova o eco.
Rich Homolka
Outra opção, se não houver muitas, seria confirmar a exclusão de cada arquivo com-exec rm -ri {} \;
doovers
4
-exec rm -rf {} +provavelmente é muitas vezes mais rápido, porque não precisa iniciar muitas rminstâncias. Em vez disso, compacta a quantidade máxima de argumentos (diretórios a serem removidos nesse caso) em uma chamada. Isso é possível porque rmaceita vários argumentos.
Daniel B