Il est étrange que personne d'autre n'ait mentionné que les versions modernes de GNU tarvous 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 gzipou à bzip2des fichiers compressés, GNU tarles 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 cpioprogramme ` ` 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 gzipqui 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 bzip2qui, 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 cpioa des conventions amusantes. C'est vrai, mais jusqu'à ce que GNU tarobtienne les options appropriées (' -T -'), cpioc'é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 cpioc'est que non seulement vous pouvez choisir les fichiers - vous deviez les choisir. Il y a encore un endroit où les cpioscores; 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' -depthoption « » activée findest 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' -depthoption, la cpiocommande 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). ]