TLDR : di solito puoi semplicemente concatenarli
Il formato file utilizzato da gzip
è progettato in modo che la concatenazione di due o più file compressi e la decompressione del risultato forniscano gli stessi dati della concatenazione delle versioni non compresse; vedere https://stackoverflow.com/questions/8005114/fast-concatenation-of-multiple-gzip-files
https://stackoverflow.com/questions/16715484/can-multiple-gz-files-be-combined-such-that-they-extract-into-a-single-file
Un po 'allo stesso modo il tar
il formato è stato originariamente progettato in modo da poter aggiungere solo voci alla fine di un archivio. Ciò è stato effettivamente richiesto perché "(t) ape (ar) chive" è stato progettato e utilizzato nastro magnetico per il backup e lo scambio, e le unità a nastro magnetico degli anni 1950-1980 (all'incirca) non potevano "riscrivere" in modo sicuro (aggiornamento) i dati esistenti vengono aggiunti solo alla fine. (Quelle unità poteva separare i file logici su un nastro usando un "nastro mark" ma i sistemi Unix non supportavano i metadati, ovvero le etichette su magtape e la gestione di un gran numero di file su nastro in base alla posizione numerica fisica era solo un PITA, quindi il tar
l'approccio di aggiungere a un archivio esistente era molto preferito.)
Negli ultimi anni questo è diventato molto meno comune e GNU tar ora non lo supporta per impostazione predefinita; devi specificare -i
(o forma lunga --ignore-zeros
) e poi funziona bene:
$ printf 'ONEONEONE%90d\n' {0..99999} >file1
$ printf 'TWOTWOTWO%90d\n' {0..199999} >file2
$ ll
total 29300
-rw-r--r--. 1 dthomps users 10000000 Sep 9 02:14 file1
-rw-r--r--. 1 dthomps users 20000000 Sep 9 02:15 file2
$ tar -czf tar1.tgz file1
$ tar -czf tar2.tgz file2
# or tar -cf - file1 |gzip >tar1.tgz and similarly for 2, see below
$ cat tar2.tgz tar1.tgz >combined.tgz
$ tar -tvzif combined.tgz
-rw-r--r-- dthomps/users 20000000 2016-09-09 02:15 file2
-rw-r--r-- dthomps/users 10000000 2016-09-09 02:14 file1
# or gunzip <combined.tgz |tar -tvif - see below
$
I vecchi tars possono supportare la concatenazione degli archivi per impostazione predefinita (n -i
); se avrò il tempo di avviare alcuni dei miei vecchi sistemi di test, aggiornerò. Tuttavia, di solito non supportano l'integrazione -z
compressione come gtar, quindi è necessario utilizzare il tar cf - | gzip >
e gunzip < | tar -xf -
le forme.
Se si utilizzano percorsi relativi per i file nell'archivio, come è comune e preferito oggi, quando si estrae dal risultato concatenato tutte le voci (o tutte quelle selezionate) vengono estratte in relazione alla stessa nuova directory, quindi assicuratevi di creare ciascuna archivio 'pezzo' con percorsi relativi che funzionano insieme come desiderato. Se vuoi inserire un file in un pezzo aggiunto per sostituirne uno nel pezzo principale, usa lo stesso percorso / nome relativo; se si desidera creare file distinti, utilizzare percorsi / nomi relativi distinti.