Comment compresser plusieurs fichiers dans une archive .xz?

10

Je veux compresser plusieurs images dans une archive .xz. Comment je fais ça?

Graphiques éloignés
la source

Réponses:

10

Bien que comme détaillé par Zacharee1 et par heemayl soit généralement ce que vous voudrez faire, une autre façon est de diriger les données goudronnées vers la commande:tar cJf archive files...xz

tar c files... | xz > archive.tar.xz

Étant donné qu'Ubuntu tarprend en charge l' Joption, cette autre méthode est particulièrement utile lorsque vous souhaitez transmettre des options à xz.

Dans cet exemple, je tar et xzip certains fichiers TIFF avec un niveau élevé de compression ( -9vers xz) et une sortie détaillée ( vvers tar, -vvers xz):

ek@Io:~/Pictures$ tar vc *.tif{,f} | xz -9v > pics.tar.xz
page001.tif
page002.tif
page003.tif
page004.tif
page9087.tif
page3la.tiff
quux0000.tiff
  100 %       207.3 KiB / 290.0 KiB = 0.715

Bien entendu, cela pourrait également se faire en deux étapes distinctes:

ek@Io:~/Pictures$ tar vcf pics.tar *.tif{,f}
page001.tif
page002.tif
page003.tif
page004.tif
page9087.tif
page3la.tiff
quux0000.tiff
ek@Io:~/Pictures$ xz -9v pics.tar
pics.tar (1/1)
  100 %       207.3 KiB / 290.0 KiB = 0.715

Ces deux façons ne sont pas réellement équivalentes dans leur fonctionnement, bien que les .tar.xzfichiers qu'ils produisent à la fin devraient être les mêmes (et l'étaient lorsque je les ai testés).

  • Dans le premier, la sortie de tarest redirigée ( |) vers l' entrée de xz. xzreçoit des données de tarpresque immédiatement, et aucun fichier tar non compressé intermédiaire n'est jamais créé. Cela signifie que la première méthode est essentiellement équivalente àtar cJf archive files... , à l'exception des arguments supplémentaires passés à xz.
  • Dans le second, une archive tar non compressée est créée par la première commande, puis compressée par xzdans la deuxième commande. ( xzsupprime automatiquement le fichier d'origine lorsqu'il est terminé, sauf s'il est invoqué avec -k/ --keep.)

Pour en savoir plus, consultez cet article de Rafael van Horn et les pages de manuel taret xz.

Eliah Kagan
la source
1
+ 1..ceci est bon quand un taux de compression plus élevé (ou variable) est souhaité ..
heemayl
2
Bonjour 2015! Une autre façon de réaliser différents niveaux de compression en utilisant tar -Jest de spécifier la variable d'environnement XZ_OPT, ce qui rend l'invocation quelque chose comme:XZ_OPT="-9v" tar -Jcf out.tar.xz [files]
Wug
2
@Wug C'est une excellente idée. Il me semble qu'il mérite sa propre réponse distincte. Êtes-vous prêt à publier cela?
Eliah Kagan
13

Utiliser taravec -Joption:

tar -cvJf images.tar.xz /directory/containing/images/*

tar est utilisé pour combiner plusieurs fichiers en un seul (Archive), puis nous devons compresser l'archive à l'aide de l'algorithme de compression XZ.

De man tar:

-c, --create
       create a new archive
-v, --verbose
       verbosely list files processed
-J, --xz

-f, --file ARCHIVE
       use archive file or device ARCHIVE

Notez également que images.tar.xzsera créé dans le répertoire courant, si vous souhaitez le sauvegarder ailleurs, utilisez /full/path/to/images.tar.xz.

heemayl
la source
a commencé le processus de xzing de plusieurs PSD énormes et pour être honnête, l'archive offre une énorme compression! 400 Mo + est désormais 200 Mo
Distant Graphics
1
great..bien que ce xzsoit le plus lent parmi xz, gzipen bzip2raison de son taux de compression plus élevé que les autres..la lenteur vaut la peine d'être traitée si vous voulez plus de compression ..
heemayl
Mes psd au total sont, comme, 600-900 Mo au total xD
Distant Graphics
vous êtes
prêt
une sorte d'erreur ._.
Distant Graphics
3

Utilisez cette commande: tar cJf <archive.tar.xz> <files>. Séparez les chemins d'accès aux fichiers par un espace.

Le vagabond
la source
vous en avez besoin:-cfJ
AB
1
@AB: vous n'avez pas besoin -devant .. de man tar: A function letter need not be prefixed with ``-''..so tar cJfest absolument OK.
heemayl
@heemayl Mais cela ne semble pas fonctionner. Je l'ai essayé sans le «-», mais le tar n'est pas terminé.
AB
@heemayl C'est ce que je pensais.
TheWanderer
1
Notez que vous devriez vous en tenir à votre première réponse tar cJf, ce qui donnerait à OP une autre façon de le faire car ma réponse était déjà couverte tar --cvJfau début ..
heemayl