Es ist seltsam, dass niemand sonst erwähnt hat, dass moderne Versionen von GNU tardas Komprimieren beim Bündeln ermöglichen:
tar -czf output.tar.gz directory1 ...
tar -cjf output.tar.bz2 directory2 ...
Sie können auch den Kompressor Ihrer Wahl verwenden, sofern er die Optionen ' -c' (zu stdout oder von stdin) und ' -d' (dekomprimieren) unterstützt:
tar -cf output.tar.xxx --use-compress-program=xxx directory1 ...
Auf diese Weise können Sie einen alternativen Kompressor angeben.
[ Hinzugefügt : Wenn Sie Dateien extrahieren gzipoder bzip2komprimieren, tarerkennt GNU diese automatisch und führt das entsprechende Programm aus. Das heißt, Sie können verwenden:
tar -xf output.tar.gz
tar -xf output.tgz # A synonym for the .tar.gz extension
tar -xf output.tar.bz2
und diese werden richtig gehandhabt. Wenn Sie einen nicht standardmäßigen Kompressor verwenden, müssen Sie dies bei der Extraktion angeben.]
Der Grund für die Trennung ist, wie in der ausgewählten Antwort, die Aufgabentrennung. Unter anderem bedeutet dies, dass Benutzer das cpioProgramm ' ' zum Packen der Dateien (anstelle von tar) verwenden und dann den Kompressor der Wahl verwenden konnten (es war einmal der bevorzugte Kompressor pack, später war er es compress(was viel effektiver war als) pack), und dann gziplief das um seine beiden Vorgänger herum und ist völlig konkurrenzfähig mit zip(das auf Unix portiert wurde, aber dort nicht nativ ist), und jetzt, bzip2was meiner Erfahrung nach normalerweise einen Vorteil von 10-20% gegenüber hat gzip.
[ Hinzugefügt : Jemand hat in seiner Antwort vermerkt, dass cpioes lustige Konventionen gibt. Das stimmt, aber bis GNU tardie relevanten Optionen (' -T -') erhielt, cpiowar der bessere Befehl, wenn Sie nicht alles archivieren wollten, was sich unter einem bestimmten Verzeichnis befand - Sie konnten tatsächlich genau auswählen, welche Dateien archiviert wurden. Der Nachteil cpiowar, dass man die Dateien nicht nur auswählen konnte , sondern auch auswählen musste . Es gibt noch einen Ort, an dem cpioPunkte erzielt werden. Es kann eine In-situ-Kopie von einer Verzeichnishierarchie in eine andere ohne Zwischenspeicher erstellen:
cd /old/location; find . -depth -print | cpio -pvdumB /new/place
Im Übrigen ist die -depthOption ' ' findin diesem Zusammenhang wichtig - sie kopiert den Inhalt von Verzeichnissen, bevor die Berechtigungen für die Verzeichnisse selbst festgelegt werden. Als ich den Befehl überprüft habe, bevor ich den Zusatz zu dieser Antwort eingegeben habe, habe ich einige schreibgeschützte Verzeichnisse kopiert (Berechtigung 555). Als ich die Kopie löschen wollte, musste ich die Berechtigungen für die Verzeichnisse lockern, bevor ' rm -fr /new/place' beendet werden konnte. Ohne die -depthOption cpiowäre der Befehl fehlgeschlagen. Ich erinnerte mich nur daran, als ich die Bereinigung durchführte - die angegebene Formel lautet für mich automatisch (hauptsächlich aufgrund vieler Wiederholungen über viele Jahre). ]]