7Zip - Riga di comando: escludere le cartelle in base al modello jolly?


108

Qualche idea su come escludere un percorso (i) jolly da un comando 7zip della riga di comando?

Sto facendo qualcosa del genere:

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

e vorrei escludere una \bin\*.*o più \obj\*.*cartelle trovate sotto "FolderToArchive".

Per escludere i file, è possibile utilizzare il -xparametro Il file della guida fornisce questo esempio per l'utilizzo di -x:

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

È fantastico per escludere un file. Ma, ancora una volta, vorrei escludere una cartella specificata con caratteri jolly. Sotto la mia "FolderToArchive" ci sono più cartelle, in quelle cartelle non può o non può essere bin\e obj\cartelle. Vorrei non includerli nell'archivio.

Ho provato modelli come

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

Nessuno sembra escludere la bin\cartella. È semplicemente una limitazione di 7zip?

Risposte:


132

Per escludere ricorsivamente le cartelle bin e obj è possibile utilizzare il comando:

7z.exe a -t7z archive.7z FolderToArchive\ -mx0 -xr!bin -xr!obj

5
Per tutti gli altri: se si desidera ignorare solo i file nella directory principale, utilizzare -xr0!*.zip- almeno non riuscivo a farlo funzionare senza r0.
Oliver,

6
Inoltre, se questo si trova in una riga di comando Linux / Unix, potrebbe essere necessario racchiuderlo tra virgolette singole, per non aggiungere pre-elaborazione dalla shell, ad esempio '-x!$RECYCLE.BIN'per escludere il Cestino di un'unità esterna.
thanosa75,

15

Per evitare bug, usa -r o -xr con attenzione.

supponiamo di avere directory come:

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

ed esegui il comando:

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

cosa hai in archivio.7z:

.\path2\src
.\path5\src

Cioè, .\path2\e .\path5\divenne la cartella principale in archivio.7z ed entrambe le bindirectory furono escluse.

-x supporta solo il percorso / nome file relativo alla cartella principale nell'archivio.

Quindi, se vuoi solo escludere .\path1\path2\bin, ma includere tutte le altre directory 'bin', il comando dovrebbe essere così:

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

Ho provato a usare il percorso assoluto in -x, ma non ci riesco mai.


Aggiornare:

C'è un'opzione -spfin 7z per Linux che funziona con il percorso assoluto.

Secondo Marco , -spfè disponibile anche su Windows da 7-zip 15.14


2
Nota: almeno su Ubuntu ti consigliamo di mettere tutti quei termini -x tra virgolette singole '-x!path2\bin'per non incorrere nella sostituzione della shell ... (ottenendo un "comando" molto più lungo e sintatticamente errato ...)
Frank Nocke,

Per fare riferimento al commento di @FrankNocke, puoi anche farlo su Windows per consentire i punti nei nomi delle cartelle:'-xr!\.foo'
DonBecker,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.