¿Cómo uso 7-zip para hacer una copia de seguridad de los archivos, pero excluyo algunos directorios?

43

Me gustaría usar 7-zip para hacer una copia de seguridad de un directorio, pero me gustaría que excluyera todos los directorios llamados ".svn" (en cualquier parte del árbol de origen). ¿Alguien sabe si esto es posible y en ese caso cómo?

Mikael Sundberg
fuente

Respuestas:

35

Para excluir todos los directorios .svn, debe agregar el -xr!?svn\*modificador

Por ejemplo, lo siguiente creará una copia de seguridad del C:\Project\To\Backupdirectorio excluyendo cualquier carpeta que satisfaga ?svn:

"C:\Program Files\7-Zip\7z.exe" a -r -tzip -y -xr!?svn\* Project.zip C:\Project\To\Backup\*
ManiacD
fuente
Gracias ManiacD, pero no puedo hacer que esto funcione -xr!? Svn * me da un error y si intento -xr! .Svn * aún no excluirá .svn
Mikael Sundberg
necesita una barra invertida después de? svn para que funcione, lo que significa excluir todo lo que se encuentra debajo del directorio .svn. -xr!? svn \ *
ManiacD
No se preocupe, tuve muchos problemas al principio para que funcionara también. El 7-zip excluye switch -x (-xr directorio recurse) con! excluye nombres de archivos basados ​​en una búsqueda con comodines. Sin la barra diagonal inversa, está tratando de excluir los nombres de archivo que coinciden con? Svn * ie. asvn.log con \ * al final significa que no incluye nada debajo de un directorio que coincida? svn
ManiacD
Para obtener detalles sobre cómo usar comodines, consulte el archivo de ayuda que se entrega con 7-Zip. Me ayudó a arreglar una tarea similar hace unos días. 7-Zip usa comodines un poco ... diferente;)
släcker
3
Y si tropezó aquí buscando la exclusión general de la carpeta, tenga en cuenta que ?debe coincidir con "period-svn" ( .svn), para omitir todo en la carpeta SkipMeque usaría-xr!SkipMe\*
drzaus
13

En lugar de usar 7-Zip para excluir las carpetas .svn (o potencialmente _svn), recomendaría usar el comando svn export (use svn.exe de SlikSVN ) para exportar la copia de trabajo a una carpeta temporal:

svn export C:\Path\To\WC C:\Backup\Staging

Luego use 7-Zip de la siguiente manera:

7z.exe a "C:\Parth\To\Archive" "C:\Backup\Staging\*" -bd t7z -v2g -r

Luego elimine la carpeta de ensayo.

Esto es lo que hago para hacer una copia de seguridad de mis copias de trabajo locales.

Richard Slater
fuente
Gracias por el consejo de exportación. Disponible en el menú TortoiseSVN también.
Arnold Spence
12

Puede excluir archivos con 7zip usando una lista de archivos o directorios:

/path/to7Zip/7z a -bd f:/backup/backup_2009-08-23_daily.zip home \
          '-xr@\path\to\backup_daily_exclude.lst'

El archivo de exclusión se ve así:

home\Photos\iPod*
home\dhltd\*
BlogMatrix\Sparks\db\*.archive
home\eclipse\*
.svn

La clave es -xr y, en particular, la "r" que indica aplicar la lista de exclusión de forma recursiva a cada nivel del directorio. Es posible que desee utilizar 2 listas de archivos de exclusión, una para exclusiones absolutas y otra para exclusiones recursivas. Lo anterior es de un script bash que se ejecuta en cygwin.

Tim Desjardins
fuente
4

Cuando solia

"C:\Program Files\7-Zip\7z.exe" a -r -ttar -xr!?git\* aufs2-util.tar aufs2-util\*

terminó agregando el directorio .git que no quería, cambiándolo a

"C:\Program Files\7-Zip\7z.exe" a -r -ttar -xr!?git\ aufs2-util.tar aufs2-util\*

Obtuve el resultado deseado.


fuente
3

Cuando solia

7z a "D:\codebase\w.7z" "D:\codebase\Edison\otm\Webapp" -t7z -mx0 -xr!WEB-INF\*

el directorio WEB-INF no fue excluido. Agregar un asterisco antes del nombre del directorio

7z a "D:\codebase\w.7z" "D:\codebase\Edison\otm\Webapp" -t7z -mx0 -xr!*WEB-INF\*

Obtuve el resultado deseado.

Ashutosh Jindal
fuente
La parte del asterisco es la más importante. Esto debería obtener más votos a favor.
Valerio
0

Para mí, estaba tratando de hacer una copia de seguridad de un montón de directorios de código maven y quería excluir cualquier directorio llamado "objetivo":

"C:\Program Files\7-Zip\7z.exe" a -r -tzip -y -xr!*\target\* site.zip C:\code\site\

El parámetro de exclusión relevante fue -xr!*\target\*.

Kit Menke
fuente