È strano che nessun altro abbia menzionato che le versioni moderne di GNU tar
ti consentono di comprimere mentre stai raggruppando:
tar -czf output.tar.gz directory1 ...
tar -cjf output.tar.bz2 directory2 ...
Puoi anche usare il compressore di tua scelta a condizione che supporti le opzioni ' -c
' (to stdout, o from stdin) e ' -d
' (decompress):
tar -cf output.tar.xxx --use-compress-program=xxx directory1 ...
Ciò consentirebbe di specificare qualsiasi compressore alternativo.
[ Aggiunto : se si stanno estraendo da gzip
o bzip2
file compressi, GNU li tar
rileva automaticamente ed esegue il programma appropriato. Cioè, puoi usare:
tar -xf output.tar.gz
tar -xf output.tgz # A synonym for the .tar.gz extension
tar -xf output.tar.bz2
e questi saranno gestiti correttamente. Se utilizzi un compressore non standard, devi specificarlo quando esegui l'estrazione.]
Il motivo della separazione è, come nella risposta scelta, la separazione dei compiti. Tra le altre cose, significa che le persone potevano usare il cpio
programma ' ' per impacchettare i file (invece di tar
) e quindi utilizzare il compressore preferito (una volta, il compressore preferito era pack
, in seguito lo era compress
(che era molto più efficace di pack
), e quindi gzip
che girava intorno a entrambi i suoi predecessori, ed è completamente competitivo con zip
(che è stato portato su Unix, ma non è nativo lì), e ora bzip2
che, nella mia esperienza, di solito ha un vantaggio del 10-20% gzip
.
[ Aggiunto : qualcuno ha notato nella sua risposta che cpio
ha convenzioni divertenti. È vero, ma fino a quando GNU non ha tar
ottenuto le opzioni pertinenti (' -T -
'), cpio
era il comando migliore quando non si desiderava archiviare tutto ciò che si trovava sotto una determinata directory: si poteva effettivamente scegliere esattamente quali file erano archiviati. Il rovescio della medaglia cpio
è che non solo si poteva scegliere i file - si doveva scegliere loro. C'è ancora un posto dove i cpio
punteggi; può eseguire una copia in situ da una gerarchia di directory a un'altra senza alcuna memoria intermedia:
cd /old/location; find . -depth -print | cpio -pvdumB /new/place
Per inciso, l' -depth
opzione " " su find
è importante in questo contesto: copia il contenuto delle directory prima di impostare i permessi sulle directory stesse. Quando ho controllato il comando prima di inserire l'aggiunta a questa risposta, ho copiato alcune directory di sola lettura (autorizzazione 555); quando sono andato a cancellare la copia, ho dovuto rilassare i permessi sulle directory prima che " rm -fr /new/place
" potesse finire. Senza l' -depth
opzione, il cpio
comando sarebbe fallito. L'ho ricordato solo quando sono andato a pulire - la formula citata è quella automatica per me (principalmente in virtù di molte ripetizioni nel corso di molti anni). ]