Come decomprimere tutti i file in tutte le sottodirectory in un file compresso in bash


201

Possibile duplicato:
decompressione di un set di directory e creazione di un file compresso tar

Questo post descrive come decomprimere ogni file individualmente all'interno di una struttura di directory. Tuttavia, devo fare qualcosa di leggermente diverso. Ho bisogno di produrre un grande file gzip per tutti i file in una determinata directory. Devo anche essere in grado di specificare il nome del file di output per il file compresso (ad esempio, files.gz) e sovrascrivere il vecchio file di file compresso se ne esiste già uno.


gzipper sua stessa natura comprime solo un singolo file. Per inserire più file in un unico file per il successivo gzipping, utilizzare tar.
Thomas,

Risposte:


387
tar -zcvf compressFileName.tar.gz folderToCompress

tutto in folderToCompress andrà a compressFileName

Modifica: dopo aver esaminato e commentato, mi sono reso conto che le persone potevano confondersi con compressFileName senza estensione. Se vuoi puoi usare l'estensione .tar.gz (come suggerito) con compressFileName


2
Grazie. Comprimerà tutto in "folderToCompress" (ovvero ricorsivamente)?
Doug,

2
tutto nella cartella ToCompress andrà a compressFileName
amitchhajer

80
Probabilmente vorrai scegliere in compressFileNamemodo che includa l' .tar.gzestensione o farai impazzire tutti gli altri.
Drewish

9
Questo funziona anche per un numero arbitrario di directory, ad esempio tar -zcvf two-dirs.tar.gz dir-one dir-twocreerà un archivio contenente due directory.
Zoltán,

5
Funziona anche con la *compressione di tutto nella tar -zcvf all.tar.gz *

61

ci sono molti metodi di compressione che funzionano in modo ricorsivo nella riga di comando ed è bene sapere chi è il pubblico finale.

cioè se deve essere inviato a qualcuno che esegue Windows allora zip sarebbe probabilmente la cosa migliore:

zip -r file.zip folder_to_zip

unzip filenname.zip

per altri utenti di Linux o il tuo self tar è fantastico

tar -cvzf filename.tar.gz folder

tar -cvjf filename.tar.bz2 folder  # even more compression

#change the -c to -x to above to extract

Bisogna stare attenti con tar e come vengono tarate / estratte le cose, ad esempio se corro

cd ~
tar -cvzf passwd.tar.gz /etc/passwd
tar: Removing leading `/' from member names
/etc/passwd


pwd

/ Home / myusername

tar -xvzf passwd.tar.gz

questo creerà / home / myusername / etc / passwd

incerto se tutte le versioni di tar fanno questo:

 Removing leading `/' from member names

18

Il post di @amitchhajer funziona per GNU tar. Se qualcuno trova questo post e ne ha bisogno per funzionare su un GNUsistema NON , può farlo:

tar cvf - folderToCompress | gzip > compressFileName

Per espandere l'archivio:

zcat compressFileName | tar xvf -

2
Oltre ad essere portatile, questa soluzione è utile se si desidera passare argomenti a gzip (ad esempio, --test o --best), poiché afaik anche GNU tar non fornisce un modo per inviare argomenti a gzip.
Timothy Woods,

Questo è versatile, poiché puoi anche usare altri compressori. Ad esempio, pigzche è più veloce in quanto può utilizzare meglio la CPU (un'implementazione multi-thread di zip).
Ortwin Angermeier,
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.