7 Zip - Línea de comando: ¿Excluir carpetas por patrón comodín?

108

¿Alguna idea de cómo excluir una (s) ruta (s) comodín de un comando 7zip de línea de comandos?

Estoy haciendo algo como esto:

7z.exe a -t7z archive.7z FolderToArchive\ -mx0

y quisiera excluir cualquiera \bin\*.*o \obj\*.*carpetas encontradas debajo de "FolderToArchive".

Para excluir archivos, puede usar el -xparámetro. El archivo de ayuda da este ejemplo para usar -x:

7z a -tzip archive.zip *.txt -x!temp.*

Eso es genial para excluir un archivo. Pero, nuevamente, me gustaría excluir una carpeta especificada con comodines. Bajo mi "FolderToArchive" existen varias carpetas, en esas carpetas que puede o no ser bin\y obj\carpetas. Me gustaría no incluirlos en el archivo.

He intentado patrones como

-x!bin\*
-x!bin\*.*
-x!\bin\*
-x!\bin\*.*
-x!\\bin\\*
-x!\\bin\\*.*

Ninguno parece excluir la bin\carpeta. ¿Es esto simplemente una limitación de 7zip?

Yoopergeek
fuente

Respuestas:

132

Para excluir las carpetas bin y obj de forma recursiva, puede usar el comando:

7z.exe a -t7z archive.7z FolderToArchive\ -mx0 -xr!bin -xr!obj
pesado
fuente
55
Para todos los demás: si desea ignorar solo los archivos en el directorio raíz, use -xr0!*.zip, al menos no podría hacer que funcione sin el r0.
Oliver
66
Además, si esto se encuentra en una línea de comandos de Linux / Unix, es posible que necesite encerrar entre comillas simples, para no agregar el procesamiento previo por parte del shell, por ejemplo, '-x!$RECYCLE.BIN'para excluir la papelera de reciclaje de una unidad externa.
thanosa75
15

Para evitar errores, use -r o -xr con cuidado.

supongamos que tiene directorios como:

.\path1\path2\bin
.\path1\path2\src
.\path3\path4\path5\bin
.\path3\path4\path5\src

y ejecuta el comando:

7z a -t7z archive.7z .\path1\path2 .\path3\path4\path5 -xr!bin

lo que tienes en el archivo.7z:

.\path2\src
.\path5\src

Es decir, el .\path2\y .\path5\se convirtió en la carpeta superior en archive.7z, y ambos binfueron excluidos directorios.

-x solo admite ruta / nombre de archivo relativo a la carpeta superior en el archivo.

Entonces, si solo desea excluir .\path1\path2\bin, pero incluir todos los demás directorios 'bin', el comando debería ser así:

7z a -t7z archive.7z .\path1\path2 .\path3\path4\path5 -x!path2\bin

Traté de usar la ruta absoluta en -x, pero nunca tuve éxito.


Actualizar:

Hay una opción -spfen 7z para Linux que funciona con ruta absoluta.

Según Marco , -spftambién está disponible en Windows desde 7-zip 15.14

zhazha
fuente
2
Nota: Al menos en Ubuntu, se recomienda que ponga todos esos términos -x entre comillas simples '-x!path2\bin'para no encontrarse con la sustitución de shell ... (consiguiendo un "comando" sintácticamente mucho más largo, más largo ...)
Frank Nocke,
Para consultar el comentario de @FrankNocke, también puede hacerlo en Windows para permitir puntos en los nombres de las carpetas:'-xr!\.foo'
DonBecker