2013-05-23 13 views
15

Diciamo che ho 3 file: 1.txt, 2.txt e 3.txt che sono tutti compressi con gzip. Sono consapevole che gzip consente a più file da combinare con cat:È possibile combinare più file .gz in modo che vengano estratti in un singolo file?

cat 1.gz 2.gz 3.gz > 123.gz 

Tuttavia quando 123.gz viene estratto produrrà i 3 file originali.

È possibile combinare i tre archivi in ​​modo che i singoli file all'interno dell'archivio vengano combinati in un singolo file?

+0

il modo tradizionale Unix è quello di tar loro. AFAIK [xz] (http://tukaani.org/xz/) può fare quello che vuoi, ma quelli non sono zip. – djf

+1

Quando 123.gz viene estratto da cosa? gunzip _will_ lo estrae in un singolo file chiamato 123. –

risposta

20

Sorprendentemente, questo è effettivamente possibile.

GNU zip man page states: più file compressi possono essere concatenati. In questo caso, gunzip estrarrà tutti i membri contemporaneamente.

Esempio:

È possibile costruire la zip in questo modo:

echo 1 > 1.txt ; echo 2 > 2.txt; echo 3 > 3.txt; 
gzip 1.txt; gzip 2.txt; gzip 3.txt; 
cat 1.txt.gz 2.txt.gz 3.txt.gz > all.gz 

Poi estrarla:

gunzip -c all.gz > all.txt 

Il contenuto di all.txt dovrebbero ora essere:

1 
2 
3 

Quale è la stessa:

cat 1.txt 2.txt 3.txt 

E - come richiesto - "gunzip estrarrà tutti i membri in una sola volta".

4

Al fine di concatenare più file, provare:

gzip -c 1.txt > 123.gz 
gzip -c 2.txt >> 123.gz 
gzip -c 3.txt >> 123.gz 

Successivamente, gzip -dc 123.gz sarebbe equivalente a cat 1.txt 2.txt 3.txt.

+0

Grazie, questo non funziona nel mio caso dato che ogni archivio è scritto da un riduttore diverso in un lavoro Hadoop. – slayton

Problemi correlati