2009-02-06 12 views
62

Quiero borrar todos los "_svn" en cada carpeta y subcarpeta ...Herramienta de línea de comandos para eliminar carpetas con un nombre especificado recursivamente en Windows?

Por ejemplo

 
c:\ 
    proyect1 
    _svn 
    images 
    _svn 
    banner 
     _svn 
    buttons 
     _svn 

Luego ejecutar algo así como

rm-recurse c:\proyect1 _svn 

y que debería llegar:

 
c:\ 
    proyect1 
    images 
    banner 
    buttons 

Lo ideal sería un pequeño EXE independiente o algo similar e eso.

- Gracias Grant, tan pronto como me envió la pregunta vi SVN documentación sobre el comando de exportación de SVN, pero también quiero eliminar la _vti_ * carpetas rellenan Visual Studio crea, por lo que también exploraré la for solución.

+0

favor reformular esto en la forma de una pregunta; ¿está pidiendo ayuda para desarrollar una herramienta para hacer esto, o desea saber si hay alguna de esas herramientas disponibles? – Rob

+0

solo crea un archivo .bat. :-) – MarlonRibunal

+14

. Los archivos .bat no resuelven todos los problemas de Windows. A veces tienes que llenarlos con comandos y cosas primero. – Grant

Respuesta

116

similares a BlackTigerX de "para", que iba a sugerir

for /d /r . %d in (_svn) do @if exist "%d" rd /s/q "%d"

+0

¿Se requiere "si existe"? – BlackTigerX

+3

Sí, porque la naturaleza de este "para" es que agrega "_svn" a cada entrada de directorio mientras repite el árbol de directorios. – JMD

+0

Su solución pasa por alto al devolver una lista explícita de los directorios existentes. – JMD

14
for /f "usebackq" %d in (`"dir _svn /ad/b/s"`) do rd /s/q "%d" 

http://ebersys.blogspot.com/2008/07/recursively-delete-svn-folders-easy-way.html

+0

Me sale un error: no pude encontrar el archivo dir, lo intenté con cmd.exe/c dir ..., pero me sale el mismo error, sin embargo, la solución de JMD dis el truco ... – opensas

+0

Vaya, revisé la página a la que se ha vinculado, parece que falta un par de comillas simples ... arreglar eso también lo hizo ... – opensas

10

En Windows? Si está utilizando tortuga SVN, puede usar el comando de exportación para exportar una copia del proyecto sin las carpetas .svn/_svn.

+1

También puede exportar svn con la herramienta de línea de comandos, ya sea que esté en Windows o no. – Parappa

+0

Creo que la razón por la que las personas terminan necesitando eliminar recursivamente las carpetas .svn/_svn es porque han copiado directamente su copia de trabajo local a una nueva ubicación para hacer una comparación de carpetas de su versión modificada en comparación con una exportación limpia, es decir, después de que algo sale mal con la copia de trabajo local modificada. (Al menos es por eso que lo he necesitado. Definitivamente es más fácil/más rápido usar 'svn export' cuando eso es posible.) – JMD

2

aquí ... con FreeCommander o TotalCommander

http://www.broobles.com/blog/posts/36

socendani

+0

Como un usuario de TotalCommander (anteriormente Windows Commander!) Desde hace mucho tiempo, no puedo permitir que esta respuesta se mantenga negativa. Esta es una gran solución simple para alguien que ya tiene TC instalado. Me alegra haber aprendido este ingenioso truco. ¡Gracias! –

+0

¡La solución más directa aquí! – zatziky

4
import os 
import shutil 

curdir = os.path.abspath(os.path.dirname(__file__)) 

def removedir(dirname, name = ".svn"): 
    if os.path.isdir(dirname): 
     for file in os.listdir(dirname): 
      if os.path.isdir(os.path.join(dirname, file)) and file == name: 
       thedir = os.path.join(dirname, name) 
       shutil.rmtree(thedir) 
       print ".", 
      else: 
       removedir(os.path.join(dirname, file)) 

Creo que eres c pruebe esta secuencia de comandos de Python, que funcionará en cualquier sistema operativo si tiene instalado Python.

21

el aprendizaje de algo PowerShell; o)

Get-ChildItem -path c:\projet -Include '_svn' -Recurse -force | Remove-Item -force -Recurse 

La primera parte se encuentra cada carpeta _svn de forma recursiva. Force se usa para encontrar carpetas ocultas. La segunda parte se utiliza para eliminar estas carpetas y sus contenidos. Eliminar el comando viene con un práctico parámetro "whatif" que permite previsualizar lo que se hará.

PowerShell está disponible para Windows XP y Windows Vista. Está presente en Windows 7 y en Windows Server 2008 R2 de forma predeterminada.

Es un producto MS, es gratis, ¡y es genial!

+0

Esta solución funciona perfectamente en Windows Server 2008 R2. Gracias –

16

Para la inclusión/invocación desde dentro de un archivo BATCH uso (digamos para la eliminación de depuración y liberación carpeta):

for /d /r . %%d in (Debug Release) do @if exist "%%d" echo "%%d" && rd /s/q "%%d" 

doble % se requieren dentro de un archivo por lotes para trabajar como caracteres de escape. De lo contrario, informa error de sintaxis.

Gracias.

3

Otra opción de SVN Forum: utilizar XCopy con un archivo que contiene la lista de los archivos/directorios que ser excluidos (Svn o _svn en este caso)

XCopy C:\VersionedFolder C:\UnVersionedFolder /EXCLUDE:C:\No.SVN.txt /E /C /I /F /R /Y 
+0

O 'ROBOCOPY', que no requiere un archivo de lista. –

Cuestiones relacionadas