Creazione di un archivio da una directory senza che il nome della directory venga aggiunto all'archivio


84

Ho la seguente struttura di cartelle:

  • radice
    • cartella1
    • folder2
    • Folder3
    • 7za.exe

Voglio eseguire lo strumento da riga di comando a 7 zip per comprimere tutti i file in folder1un file zip chiamato folder1.zip.

In esecuzione il seguente

7za.exe a -tzip folder1.zip folder1\\*.*

produce un file zip come previsto. Tuttavia, quando apro il file zip, ha una cartella in esso chiamata folder1, e al suo interno ho tutti i file che erano all'interno di quella cartella. Non voglio aggiungere il nome della cartella nella cartella zip, cioè vorrei aggiungere tutti i file in un formato "Flat".

Inoltre, non voglio eseguire ricorsivamente lo strumento da riga di comando per ogni singolo file / cartella.

C'è un interruttore che fornisce questa funzionalità?


Puoi cdin cartella1 e 7za.exe a -tzip ..\folder1.zip *.*?
zpletan,

Risposte:


137

Dal file della Guida di 7-Zip :

un comando (Aggiungi)

Aggiunge file all'archivio.

Esempi

7z a archive1.zip subdir\

aggiunge tutti i file e le sottocartelle dalla cartella secondaria all'archivio archive1.zip. I nomi dei file nell'archivio conterranno sottodir \ prefisso.

7z a archive2.zip .\subdir\*

aggiunge tutti i file e le sottocartelle dalla cartella secondaria all'archivio archive2.zip. I nomi dei file nell'archivio non conterranno sottodir \ prefisso.

cd /D c:\dir1\

7z a c:\archive3.zip dir2\dir3\

I nomi dei file nell'archivio c: \ archive3.zip conterranno dir2 \ dir3 \ prefix, ma non conterranno c: \ dir1 \ prefix.

Quindi il comando che vorresti sarebbe: 7za.exe a folder1.zip .\folder1\*

Inoltre, presta attenzione alla gestione dei caratteri jolly da parte di 7-Zip. Non considera *.*"tutti i file", ma significa "tutti i file con un punto nel nome del file". I file senza estensione verranno persi. Se vuoi davvero tutti i file, basta usare *invece.

Infine, il -tzipparametro non è necessario se il nome file dell'archivio termina .zip. 7-Zip è abbastanza intelligente da capire quale formato vuoi in quei casi. È richiesto solo quando si desidera un'estensione personalizzata (ad esempio 7za.exe a -tzip foo.xpi <files>per un componente aggiuntivo Mozilla).


2

Questo ha funzionato per me

Prendi in considerazione la struttura delle cartelle come C: \ Parent \ Sottocartelle ..... E vuoi creare parent.zip che conterrà tutti i file e le cartelle C: \ Parent senza cartella principale [ovvero inizierà dalle sottocartelle .....]

cd /D "C:\Parent"

"7z.exe" a Parent.zip "*.*" -r

Questo creerà Parent.zip in C: \ Parent


2
Questo duplica un'altra risposta e non aggiunge nuovi contenuti. Per favore, non pubblicare una risposta a meno che tu non abbia effettivamente qualcosa di nuovo da contribuire.
DavidPostill

Bene, mentre cercavo una soluzione, non ho ottenuto esattamente questa soluzione. Ovviamente non copierò solo alcune risposte che ho trovato online. Ci passo un po 'di tempo, quindi ho sentito di doverlo condividere. Secondo me puoi trovare questa risposta esatta qui e su Stack Overflow da me pubblicato.
Pritesh Dhokchaule,

Nota che 7-Zip non considera *.*"tutti i file" ma piuttosto "tutti i file che hanno un punto come parte del nome del file". Quindi questa risposta in realtà ometterà i file che non hanno estensione (questo è indicato nella risposta accettata).
Bill_Stewart,

1

Solo per espandere la risposta accettata (non sono stato in grado di aggiungere commenti lì):

Su Linux l'aggiunta di '*' non ha funzionato per me, quindi ho finito per inventare una riga di comando più dettagliata che ha dato il risultato desiderato:

curr_dir=$(pwd); \ 
cd source_code/lambda/ ; \
7z a ../../lambda.zip .; \
cd $curr_dir \
unset curr_dir

===========

spiegazione dello script:

  • salva il percorso dir corrente da usare in seguito;
  • passare alla directory che deve essere archiviata;
  • creare un archivio (notare '.' (punto) alla fine);
  • tornare alla directory originale;
  • sbarazzarsi della variabile che ha memorizzato il percorso dir originale

Spero possa essere utile per qualcuno.


Suggerirei di inserire le *virgolette (altrimenti la shell lo espanderà nei file in questo posto).
Simon Sobisch,

-1

Cosa ne pensi di questo. ad es. Cartella / sottocartella1, Cartella / sottocartella2

seleziona tutte le sottocartelle> fai clic con il pulsante destro del mouse quindi crea archivio> seleziona qualsiasi formato

* Il nome dell'archivio sarebbe la cartella principale.

Semplice vero?


3
La domanda riguarda la CLI per 7-zip, non come utilizzare la GUI. Imparare come utilizzare la GUI non ha senso quando si desidera automatizzare le cose.
binki,
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.