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.
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.
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>
En ajoutant v
aux commutateurs de commande ( tar -cJvf
) pour être verbeux montre les fichiers ajoutés à l'archive.
É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.
Est-il possible de passer des paramètres xz comme -e (--extended) ? Apparemment, il n'utilise pas l'extension par défaut.
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
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.
|
envoie la sortie standard vers l'entrée d'un autre programme...
... qui se trouve être xz -z -
. XZ est configuré pour compresser ( -z
) l'archive à partir de l'entrée standard ( -
).
Vous redirigez la sortie de xz
à la tar.xz
fichier.
-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.
Pour utiliser la compression multithread, l'option -T0 peut être utilisée : tar cf - directory/ | xz -z -T0 - > directory.tar.xz
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
.
tarxz() { tar cf - "$1" | xz -4e > "$1".tar.xz ; }
tarxz name_of_directory
(Remarque, pas name_of_directory/
)
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 :
c
crée une nouvelle archive pour les fichiers spécifiés.f
lit à partir d'un répertoire (il est préférable de le mettre en second car -cf
!= -fc
)-
sorties vers la sortie standard|
pipe la sortie vers la commande suivantexz -4e
appelle xz
avec le -4e
option de compression. (égale à -4
--extreme
)> 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 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.
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.
@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
+1 Sur RHEL 5.10, je ne vois pas de J
mais cela fonctionne. Je pense que vous avez besoin de RHEL6.
@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 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.