Il est étrange que personne d'autre n'ait mentionné que les versions modernes de GNU tar
vous permettent de compresser lorsque vous regroupez:
tar -czf output.tar.gz directory1 ...
tar -cjf output.tar.bz2 directory2 ...
Vous pouvez également utiliser le compresseur de votre choix à condition qu'il prenne en charge les options ' -c
' (vers stdout, ou depuis stdin) et ' -d
' (décompresser):
tar -cf output.tar.xxx --use-compress-program=xxx directory1 ...
Cela vous permettrait de spécifier n'importe quel compresseur alternatif.
[ Ajouté : Si vous procédez à une extraction gzip
ou à bzip2
des fichiers compressés, GNU tar
les détecte automatiquement et exécute le programme approprié. Autrement dit, vous pouvez utiliser:
tar -xf output.tar.gz
tar -xf output.tgz # A synonym for the .tar.gz extension
tar -xf output.tar.bz2
et ceux-ci seront traités correctement. Si vous utilisez un compresseur non standard, vous devez le spécifier lorsque vous effectuez l'extraction.]
La raison de la séparation est, comme dans la réponse choisie, la séparation des fonctions. Entre autres choses, cela signifie que les gens pouvaient utiliser le cpio
programme ` ` pour empaqueter les fichiers (au lieu de tar
) puis utiliser le compresseur de leur choix (il était une fois, le compresseur préféré était pack
, plus tard, il était compress
(ce qui était beaucoup plus efficace que pack
), puis gzip
qui tournait autour de ses deux prédécesseurs, et est entièrement compétitif avec zip
(qui a été porté sous Unix, mais n'y est pas natif), et maintenant bzip2
qui, d'après mon expérience, a généralement un avantage de 10 à 20% par rapport à gzip
.
[ Ajouté : quelqu'un noté dans sa réponse qui cpio
a des conventions amusantes. C'est vrai, mais jusqu'à ce que GNU tar
obtienne les options appropriées (' -T -
'), cpio
c'était la meilleure commande lorsque vous ne vouliez pas archiver tout ce qui se trouvait sous un répertoire donné - vous pouviez en fait choisir exactement quels fichiers étaient archivés. L'inconvénient de cpio
c'est que non seulement vous pouvez choisir les fichiers - vous deviez les choisir. Il y a encore un endroit où les cpio
scores; il peut faire une copie in-situ d'une hiérarchie de répertoires à une autre sans aucun stockage intermédiaire:
cd /old/location; find . -depth -print | cpio -pvdumB /new/place
Incidemment, l' -depth
option « » activée find
est importante dans ce contexte - elle copie le contenu des répertoires avant de définir les autorisations sur les répertoires eux-mêmes. Lorsque j'ai vérifié la commande avant de saisir l'ajout à cette réponse, j'ai copié certains répertoires en lecture seule (autorisation 555); quand je suis allé supprimer la copie, j'ai dû relâcher les permissions sur les répertoires avant que ' rm -fr /new/place
' puisse finir. Sans l' -depth
option, la cpio
commande aurait échoué. Je ne m'en suis souvenu que lorsque je suis allé faire le nettoyage - la formule citée est automatique pour moi (principalement en raison de nombreuses répétitions sur de nombreuses années). ]