J'ai donc besoin de compresser un répertoire avec une compression maximale.
Comment puis-je le faire avec xz
? Je veux dire que j'en aurai besoin tar
aussi car je ne peux pas compresser un répertoire avec seulement xz
. Y at-il un oneliner à produire par exemple foo.tar.xz
?
directory
tar
compression
LanceBaynes
la source
la source
man 1 xz
ditit's not a good idea to blindly use -9 for everything like it often is with gzip(1) and bzip2(1).
-7 ... -9 [...] These are useful only when compressing files bigger than 8 MiB, 16 MiB, and 32 MiB, respectively.
RTFM pour plus d’informations.Réponses:
En supposant que vous respectiez
xz
l’ensemble standard d’indicateurs de ligne de commande, y compris les indicateurs de niveau de compression, vous pouvez essayer:la source
-9e
est le meilleur niveau, mais cela prendra très longtemps-9e
ne vous donnera pas toujours le meilleur résultat - voir le point 8 ici. rootusers.com/13-simple-xz-examples--threads=0
à xzAvec une version récente de GNU
tar
sur un shell bash ou dérivé:le commutateur j minuscule de tar utilise bzip, le commutateur J majuscule utilise xz.
La
XZ_OPT
variable d'environnement vous permet de définir desxz
options qui ne peuvent pas être transmises via des applications appelantes telles quetar
.C'est maintenant maximal .
Reportez-vous
man xz
aux autres options que vous pouvez définir (-e
/--extreme
pourrait vous apporter des avantages supplémentaires en termes de compression pour certains jeux de données).la source
rc
etakanga
.fish
,csh
,tcsh
Etes
étant les principales coquilles qui ne supportent pas. Là, vous utiliseriez laenv
commande.-9
et-e
XZ opte, vous voulezXZ_OPT=-e9
mais comme @krzyk a souligné, -e est extrêmement lentXZ_OPT
n’est pas une fonctionnalité implémentée danstar
. C'est une caractéristique dexz
. Lors destar
appelsxz
, la variable env est simplement transmise.est encore mieux que
la source
option -e, --extreme
Modifiez le préréglage de compression (-0 ... -9) afin d'obtenir un rapport de compression légèrement supérieur sans augmenter l'utilisation de la mémoire du compresseur ou du décompresseur (exception: l'utilisation de la mémoire du compresseur peut augmenter un peu avec les préréglages -0 ... -2). L'inconvénient est que le temps de compression augmentera considérablement (il peut facilement doubler).-9
pas utiliser-9e
, ouais?XZ_OPT="-9e -T0" tar -cJf ...
Si vous avez 16 Go de RAM (et rien d’autre en cours), vous pouvez essayer:
Cela nécessitera 1,5 Gio pour la décompression et environ 11 x pour la compression. Ajustez en conséquence pour moins de mémoire.
Cela ne vous aidera si les données sont en fait que les grandes, et en tout cas , il ne sera pas utile QUE beaucoup, mais quand même ...
Si vous compressez des fichiers binaires, ajoutez --x86 en tant que première option xz. Si vous jouez avec des fichiers "multimédia" (audio non compressé ou bitmaps), vous pouvez essayer avec --delta = dist = 2 (expérimentez avec value, les bonnes valeurs à essayer sont 1..4).
Si vous vous sentez très aventureux, vous pouvez essayer de jouer avec plus d’options LZMA, comme
(Ce sont les paramètres par défaut, vous pouvez essayer des valeurs comprises entre 0 et 4, et lc + lp ne doit pas dépasser 4)
Pour voir comment les préréglages par défaut correspondent à ces valeurs, vous pouvez consulter le fichier source src / liblzma / lzma / lzma_encoder_presets.c. Rien d’intérêt là-bas cependant (-e fixe la longueur à 273 et ajuste également la profondeur).
la source
Vous pouvez essayer différentes options, pour moi -4e fonctionne mieux
J'ai testé en exécutant:
Il semble donc que l'option -4e fonctionne un peu mieux que -9e.
la source
no difference = 660 4e better than 9e = 74 9e better than 4e = 17 total files = 751 tar 2 html 2 csv 2 xml 2 gz 2 ppt 2 eps 2 docx 2 gif 2 rpm 3 png 3 asv 3 xlsx 3 exe 3 rar 4 nc 4 txt 5 odt 6 xls 7 zip 7 doc 9 m 12 dat 17 other 109 pdf 133 135 jpg 270
txt 109 txt/pdf 135
tar
les fichiers ing à l'aide dexz
.tar --help
:-I, --use-compress-program=PROG
compresser également avec des compresseurs externes:
décompresser les compresseurs externes:
list compresseurs externes d'archives:
la source
-I
ajoutée.tar
La commande utiliseJ
flag pour les fichiers xz. Un exemple:tar -cJvf foo.tar.xz foo/
la source
J
était déjà mentionné dans la réponse de bdowningPour les personnes intéressées, sa
-e9
taille est 0,4% plus petite, 20% plus lente à la compression, 3% plus lente à la décompression, par rapport à-9
un ordinateur portable classique. Ici, le timing s'exécute sur la structure de répertoire du code source Python.Compression:
Décompression:
Taille du fichier:
la source
Ce n'est pas une réponse exacte à votre question mais vous pouvez utiliser une commande au lieu de deux:
ajoute tous les fichiers du répertoire "dir1" à archive archive.7z en utilisant "ultras ettings"
les autres formats supportés sont: zip, gzip, bzip2 ou tar. pour cela remplacez juste
7z
après-t
.--la source
man 7z
REMARQUE: n'utilisez pas cette commande pour sauvegarder vos fichiers système, à l' exception des fichiers personnels, car le format 7z ne stocke pas les autorisations du système de fichiers .
la source
Dans une machine multicœur à partir de la version v5.2.0 de xz-utils, vérifiez:
Si vous souhaitez utiliser le nombre maximal de cœurs et la compression maximale:
Ou définissez -T sur le nombre de cœurs que vous souhaitez utiliser.
Ensuite:
Cela peut aussi être utile pour choisir le niveau de compression:
https://catchchallenger.first-world.info/wiki/Quick_Benchmark:_Gzip_vs_Bzip2_vs_LZMA_vs_XZ_vs_LZ4_vs_LZO
la source
Si vous souhaitez que cela se termine plus rapidement, en utilisant plusieurs threads, mais sans ralentir votre système pendant que vous effectuez un autre travail, essayez d'ajouter
-Tn
où n est le nombre de threads que vous souhaitez utiliser, ainsi quenice
de rétrograder la compression en priorité inactive.Modèle (pour 4 fils):
Essayez de regarder dans
top
ouhtop
lorsque vous faites cela dans un grand répertoire (plusieurs Go). Espérons que vous devriez voir plusieursxz
threads avec la valeur Nice de 19 (priorité la plus basse).J'ai également simplifié ce point, de la manière suivante: les
-f -
réponses suivantes ne sont tout simplement pas nécessaires, cartar
la sortie par défaut est stdout.Vous pouvez
nice
également traiter le fichier tar, mais je ne l'ai jamais trouvé nécessaire, commexz
toujours les goulots d'étranglement du processeur pour le pipeline.Note pratique, je l'utilise rarement
xz -9
pour quoi que ce soit, pas à cause du temps processeur ou du temps alloué, mais à cause de la mémoire importante. Jetez un coup d'œil à https://catchchallenger.first-world.info/wiki/Quick_Benchmark:_Gzip_vs_Bzip2_vs_LZMA_vs_XZ_vs_LZ4_vs_LZO#Memory_requirements_on_compression . Lexz
compresseur, commebzip2
, mais contrairementgzip
, utilise plus de mémoire pour des facteurs de compression plus élevés. Mis à part cela, quixz
utilise beaucoup plus de mémoire que tout autre compresseur, vous pouvez facilement utiliser plus de 600 Mo de mémoire. Et si vous utilisez l'-T
option pour activer la compression par thread, les exigences en mémoire vont encore plus loin. Par exemple, si vous exécutez un petit service sur une petite machine virtuelle dotée de 1 à 2 Go de mémoire, vous risquez par inadvertance d’avoir un impact.la source
Sur Mac OS X, une autre approche pour transmettre le paramètre
tar
consiste à utiliser un--options=
indicateur. Par exemple,la source