Aggiunta di file decompressi a una cartella zippata


33

Sto provando ad aggiungere file decompressi a una cartella esistente già zippata new folder.zip. È possibile utilizzare zip -r new folder.zipdopo aver aggiunto alcuni file decompressi? Questo comando comprime la cartella? C'è qualche alternativa per farlo?


puoi pipe, decomprimere il file originale | quindi comprimi l'intero contenuto come crei un nuovo file. Non sono sicuro di come lo faresti con un solo comando.
unixmiah,

Risposte:


44

Usa il flag di aggiornamento: -u

Esempio:

zip -ur existing.zip myFolder

Questo comando comprime e aggiunge myFolder(ed è contenuto) a existing.zip.


Uso avanzato:

Il flag di aggiornamento confronta effettivamente i file in arrivo con quelli esistenti e aggiungerà nuovi file o aggiornerà quelli esistenti.

Pertanto, se si desidera aggiungere / aggiornare una sottodirectory specifica all'interno del file zip, aggiornare semplicemente l'origine come desiderato, quindi comprimere nuovamente l'intera origine con il -uflag. Solo i file modificati verranno compressi.

Se non si ha accesso ai file di origine, è possibile decomprimere il file zip, quindi aggiornare i file desiderati e quindi ri-zip con il -uflag. Ancora una volta, verranno compressi solo i file modificati.

Esempio:

Struttura della fonte originale


ParentDir
├── file1.txt
├── file2.txt
├── ChildDir
│   ├── file3.txt
│   ├── Logs
│   │   ├── logs1.txt
│   │   ├── logs2.txt
│   │   ├── logs3.txt

Struttura sorgente aggiornata


ParentDir
├── file1.txt
├── file2.txt
├── ChildDir
│   ├── file3.txt
│   ├── Logs
│   │   ├── logs1.txt
│   │   ├── logs2.txt
│   │   ├── logs3.txt 
│   │   ├── logs4.txt <-- NEW FILE 

uso

$ zip -ur existing.zip ParentDir 
> updating: ParentDir/ChildDir/Logs (stored 0%)
>   adding: ParentDir/ChildDir/Logs/logs4.txt (stored 96%)

Grazie! Come posso specificare la cartella nella zip per aggiungerla?
Aaron Esau,

Ho aggiunto una sezione per rispondere alla tua domanda. :)
Ethan Strider,

0

Credo che puoi aggiungere file usando questo comando:

zip -r zipfile.zip newfile.txt newfile1.txt

L' -ropzione del comando zip consente di aggiungere file.


-rè un'opzione ricorsiva.
ctrl-alt-delor,

@richard, lo aggiusterò. Dammi alcuni
ryekayo,

@richard, risulta che la fonte da cui ho preso dice che puoi usare il comando -r per modificare un file zippato esistente: linuxnix.com/2014/05/…
ryekayo

2
Aggiungi: aggiorna le voci esistenti e aggiunge nuovi file. Se l'archivio non esiste crearlo. Questa è la modalità di default. (Non è necessaria alcuna opzione per sostituire o aggiungere file. -rPuò essere utilizzato se si aggiungono directory o quando non si aggiungono directory. Beh, ogni volta che non si desidera semplicemente aggiungere la directory e nessun contenuto, praticamente sempre Quindi, in breve, l'esempio è corretto, ma la spiegazione è sbagliata. (Meglio testarlo, questa è solo la mia interpretazione del manuale).
ctrl-alt-delor,

2
Per motivi di sicurezza, sei sicuro di voler modificare un archivio esistente? Invece farei almeno una copia di sicurezza, aggiungerei e ricontrollerei l'integrità dell'archivio prima di passare a quello nuovo.
mdpc,

0

Il flag -u funziona per i file

zip -ur zip_to_upload.zip file_to_add.txt

Saluti


0

Ho usato con successo il zipcomando. con l' opzione grow (-g), per aggiungere una sottocartella folder1/folder2contenente i file fileA.txte fileB.txt:

zip -gr folder.zip folder1/folder2

-rsignifica dir recurse .

Dal mio punto di vista, -g dovrebbe far crescere i file zip, non creare un nuovo file zip (che potrebbe essere utile con archivi zip molto grandi). In caso di problemi puoi provare prima a creare sottocartelle in folder.zip con (es.):

zip -g folder.zip folder1
zip -g folder.zip folder2

0

Se hai molti file nello stesso posto con il tuo archivio zip e vuoi copiarli tutti nell'archivio, puoi fare:

zip -ur zipfile.zip !(zipfile.zip)

Questo aggiorna il tuo file zip (l' -uopzione) in modo ricorsivo ( -ropzione) con tutti i file trovati tranne il file zip stesso ( !è la negazione del file zip)

Quindi, puoi semplicemente eliminare tutti i file tranne il file zip seguendo la stessa regola sopra:

rm !(zipfile.zip)
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.