¿Cómo usar Terminal para eliminar todas las carpetas .svn de forma recursiva?

56

¿Qué comando puedo escribir en la Terminal para poder eliminar todas las .svncarpetas dentro de una carpeta (y de todos los subdirectorios) pero no eliminar nada más?

Mikey
fuente
Tal vez podrías en su svn export path/to/repo path/to/export/tolugar ...
Jonny
Una nota svn exportes que no se copia en archivos que no son parte de svn. Por ejemplo, quería hacer esto para una aplicación de iOS que usa Cocoa Pods donde no confirmamos la carpeta Pods. Esto luego se omitió de la salida. Terminé usando algo similar a la respuesta de Rich para lo que quería.
jackofallcode

Respuestas:

120
cd to/dir/where/you/want/to/start
find . -type d -name '.svn' -print -exec rm -rf {} \;
  • Use find, que hace recursividad
  • en el directorio actual
  • tipo de archivo es directorio
  • nombre de archivo es .svn
  • imprima lo que coincide hasta este punto (los directorios .svn)
  • Ejecutar el comando rm -rf (thing found from find). el {} es un marcador de posición para la entidad encontrada
  • el ; dice encontrar que el comando para exec está hecho. Dado que el shell también tiene una idea de qué; es decir, debes escapar con \ para que el shell no haga nada especial con él, y solo pasa para encontrar
Rich Homolka
fuente
2
Buena solución. Mientras lo findtenga -delete, no eliminará los directorios no vacíos. Este enfoque es más limpio que, por ejemplo, comenzar a hacer coincidir partes de la ruta completa de los archivos.
Daniel Beck
13
Recomiendo ejecutarlo sin la -exec rm -rf {} \;primera vez para asegurarme de que solo encuentre lo que desea. Nunca tuve un problema en el que borré accidentalmente algo incorrecto, porque siempre lo verifico primero.
Rob
2
@Rob buen punto, generalmente hago -exec echo rm -rf {} \; luego elimine el eco.
Rich Homolka
Otra opción si no hay demasiados sería confirmar la eliminación de cada archivo con-exec rm -ri {} \;
Doovers
44
-exec rm -rf {} +es probable que sea muchas veces más rápido, ya que no tiene que iniciar demasiadas rminstancias. En cambio, contiene la cantidad máxima de argumentos (directorios para eliminar en este caso) en una llamada. Esto es posible porque rmacepta múltiples argumentos.
Daniel B