En plus de la réponse @Lekensteyn, je voudrais ajouter que ce comportement est basé sur la philosophie Faire une chose et bien le faire - le tar
programme sait comment mettre plusieurs fichiers en un seul flux (avec .tar
extension), gzip
sait compresser un fichier unique (ajout d'une .gz
extension) *. En combinant ces outils, vous pouvez créer une commande qui comprime plusieurs fichiers en un seul .tag.gz
fichier.
Cette approche est très flexible - vous pouvez combiner quelques commandes Unix standard pour faire toutes sortes de choses. Par exemple, si vous écrivez un meilleur programme pour compresser des fichiers, vous n'avez pas besoin de le modifier tar
pour lui permettre de créer des .tar.mymegazip
fichiers - à la place, vous dirigez simplement tar
la sortie vers votre compresseur.
De même, tar
ne sait rien de SSH, mais en combinant les commandes, vous pouvez créer un script qui archive les fichiers, les télécharger sur une machine distante via SSH et les désarchiver là-bas.
Comparez ceci à la zip
commande, qui n'est pas originaire d'Unix - elle a des outils intégrés pour compresser des répertoires entiers, crypter des fichiers, diviser l'archive en fichiers zip plus petits, etc.
(note de bas de page) - oui, tar
est capable de gzip ou bzip des fichiers lui-même en utilisant -z
et -j
commutateurs, ils ont été ajoutés pour plus de commodité, et GNU tar est en train d'apparaître gzip
ou bzip2
comme un nouveau processus.
tar c dir/ | gzip > dir.tar.gz
et lestar czf dir.tar.gz dir/
commandes font la même chose. Un exemple oùtar
est combiné avec SSH ettar
(encore une fois):tar cz Documents/ | ssh user@host 'tar xz
(rsync équivalent serait:rsync -a Documents user@host:
)