Zusätzlich zur @Lekensteyn-Antwort möchte ich hinzufügen, dass dieses Verhalten auf der Do one thing and do it well- Philosophie basiert. Das tarProgramm weiß, wie mehrere Dateien in einem Stream (mit der .tarErweiterung) gespeichert werden , und gzipweiß, wie man einen komprimiert einzelne Datei ( .gzErweiterung hinzufügen ) *. Durch Kombinieren dieser Tools können Sie einen Befehl erstellen, der mehrere Dateien zu einer einzigen .tag.gzDatei komprimiert .
Dieser Ansatz ist sehr flexibel - Sie können einige Standard-Unix-Befehle kombinieren, um alle möglichen Dinge zu erledigen. Wenn Sie beispielsweise ein besseres Programm zum Komprimieren von Dateien schreiben, müssen Sie keine Änderungen tarvornehmen, um .tar.mymegazipDateien zu erstellen. Stattdessen leiten Sie tardie Ausgabe einfach an Ihren Kompressor weiter.
Genauso wenig tarweiß man über SSH Bescheid, aber durch das Kombinieren von Befehlen kann man ein Skript erstellen, das Dateien archiviert, sie über SSH auf einen entfernten Rechner hochlädt und dort wieder entarchiviert.
Vergleichen Sie dies mit dem zipBefehl, der nicht von Unix stammt - er verfügt über integrierte Tools zum Komprimieren ganzer Verzeichnisse, Verschlüsseln von Dateien, Aufteilen des Archivs in kleinere Zip-Dateien usw.
(Fußnote) - Ja, tarDateien können mit -zund gzip oder bzip selbst -jumgeschaltet werden. Sie wurden der Einfachheit halber hinzugefügt, und GNU tar spawnt tatsächlich gzipoder bzip2als neuer Prozess.
tar c dir/ | gzip > dir.tar.gzundtar czf dir.tar.gz dir/Befehle machen dasselbe. Ein Beispiel , wotarmit SSH und kombiniert wirdtar(wieder):tar cz Documents/ | ssh user@host 'tar xz(rsync äquivalent wäre:rsync -a Documents user@host:)