187 votes

Créer un tar.xz en une seule commande

J'essaie de créer un .tar.xz archive compressée en une seule commande. Quelle est la syntaxe spécifique pour cela ?

J'ai essayé tar cf - file | xz file.tar.xz mais cela ne fonctionne pas.

291voto

user2062950 Points 2818

Utilisez le -J option de compression pour xz . Et n'oubliez pas de man tar :)

tar cfJ <archive.tar.xz> <files>

Edit 2015-08-10 :

Si vous passez les arguments à tar avec des tirets (ex : tar -cf à l'opposé de tar cf ), alors le -f l'option doit venir en dernier puisqu'il spécifie le nom du fichier (merci à @A-B-B pour l'avoir souligné !). Dans ce cas, la commande ressemble à :

tar -cJf <archive.tar.xz> <files>

6 votes

En ajoutant v aux commutateurs de commande ( tar -cJvf ) pour être verbeux montre les fichiers ajoutés à l'archive.

12 votes

Étant donné que l'ordre est important avec le tiret, il est probablement préférable de supposer que l'ordre est toujours important, et de mettre la balise f dernier, même sans le tiret.

2 votes

Est-il possible de passer des paramètres xz comme -e (--extended) ? Apparemment, il n'utilise pas l'extension par défaut.

61voto

Interrupteur -J ne fonctionne que sur les systèmes les plus récents. La commande universelle est :

Pour créer une archive .tar.xz

tar cf - directory/ | xz -z - > directory.tar.xz

Explication

  1. tar cf - directory lit le répertoire/ et commence à le mettre au format TAR. La sortie de cette opération est générée sur la sortie standard.

  2. | envoie la sortie standard vers l'entrée d'un autre programme...

  3. ... qui se trouve être xz -z - . XZ est configuré pour compresser ( -z ) l'archive à partir de l'entrée standard ( - ).

  4. Vous redirigez la sortie de xz à la tar.xz fichier.

16 votes

-f ne signifie pas "à partir d'un fichier" lorsqu'il est transmis à xz . Il s'agit plutôt de l'abréviation de --force (voir xz(1) pour plus de détails), et il est préférable de ne pas l'utiliser sauf en cas de besoin.

0 votes

@EliahKagan Corrigé. Merci.

4 votes

Pour utiliser la compression multithread, l'option -T0 peut être utilisée : tar cf - directory/ | xz -z -T0 - > directory.tar.xz

41voto

Rafael van Horn Points 541

Si vous aimez le mode pipe, c'est la solution la plus propre :

tar c some-dir | xz > some-dir.tar.xz

Il n'est pas nécessaire de mettre le f afin de traiter les fichiers et ensuite d'utiliser l'option - pour spécifier que le fichier est l'entrée standard. Il n'est pas non plus nécessaire de spécifier l'option -z option pour xz parce que c'est le cas par défaut.

Il fonctionne avec gzip y bzip2 aussi :

tar c some-dir | gzip > some-dir.tar.gz

ou

tar c some-dir | bzip2 > some-dir.tar.bz2

La décompression est également assez simple :

xzcat tarball.tar.xz | tar x
bzcat tarball.tar.bz2 | tar x
zcat tarball.tar.gz | tar x

Si vous avez seulement tar vous pouvez utiliser cat :

cat archive.tar | tar x

Si vous avez besoin de lister uniquement les fichiers, utilisez tar t .

12voto

Connor Points 698

Solution rapide

tarxz() { tar cf - "$1" | xz -4e > "$1".tar.xz ; }
tarxz name_of_directory

(Remarque, pas name_of_directory/ )


Utilisation des options de compression xz

Si vous souhaitez utiliser les options de compression pour xz ou si vous utilisez tar sur MacOS, vous voudrez probablement éviter l'option tar -cJf la syntaxe.

Selon man xz la façon de faire est la suivante :

tar cf - filename | xz -4e > filename.tar.xz

Parce que j'ai aimé Le format de Wojciech Adam Koszek mais pas d'informations :

  1. c crée une nouvelle archive pour les fichiers spécifiés.
  2. f lit à partir d'un répertoire (il est préférable de le mettre en second car -cf != -fc )
  3. - sorties vers la sortie standard
  4. | pipe la sortie vers la commande suivante
  5. xz -4e appelle xz avec le -4e option de compression. (égale à -4 --extreme )
  6. > filename.tar.xz dirige le fichier taré et compressé vers filename.tar.xz

donde -4e est d'utiliser vos propres options de compression. J'utilise souvent -k a --keep le fichier original et -9 pour une compression vraiment forte. -z pour régler manuellement xz de zipper, bien qu'il choisisse par défaut de zipper si ce n'est pas indiqué autrement.

Pour décompresser et détarter

Pour faire écho Rafael van Horn pour décompresser et détartrer (voir note ci-dessous) :

xz -dc filename.tar.xz | tar x

Note : contrairement à Réponse de Rafael utiliser xz -dc au lieu de catxz . La documentation le recommande au cas où vous l'utiliseriez pour des scripts. Le mieux est de prendre l'habitude d'utiliser -d o --decompress au lieu de unxz également. Toutefois, si vous devez le faire, vous pouvez utiliser ces commandes à partir de la ligne de commande.

0 votes

Une raison particulière pour ne pas utiliser le tar -cJf syntaxe sur MacOS ? Je suis simplement curieux, car je viens de le faire et cela semble fonctionner.

2 votes

@Lo-Tan Ça marche si vous avez du goudron. Lorsque je l'ai utilisé, je n'avais pas la bonne version de tar et cela n'a pas fonctionné pour moi. Je voulais également utiliser les options de compression pour xz, ce que vous ne pouvez pas faire si vous utilisez tar. De plus, la syntaxe piping est plus facile à retenir pour moi, donc j'ai tendance à l'utiliser. Mais chacun son truc

3voto

Jhim Preston Points 39

Essayez ça : tar -cf file.tar file-to-compress ; xz -z file.tar

Note :

  1. tar.gz et tar.xz ne sont pas les mêmes ; xz fournit une meilleure compression.
  2. N'utilisez pas de tuyau | car cela exécute les commandes simultanément. Utilisation de ; o & exécute les commandes les unes après les autres.

0 votes

+1 Sur RHEL 5.10, je ne vois pas de J mais cela fonctionne. Je pense que vous avez besoin de RHEL6.

2 votes

Pourquoi ne pas ajuster les commandes afin de faire passer la sortie de tar à xz ?

0 votes

@mwfearnley Je pense que la note est simplement pour souligner que les commandes requises doivent être exécutées séquentiellement. Puisque le nom de fichier est utilisé dans les deux commandes, elles n'écriront ou ne liront pas de données depuis la sortie ou l'entrée standard. Si vous utilisez la commande sans spécifier le nom de fichier, elles peuvent être enchaînées, comme suit tar -c file-to-compress | xz -z > file.tar.xz .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X