Entonces necesito comprimir un directorio con compresión máxima.
¿Cómo puedo hacerlo xz
? Quiero decir que también lo necesitaré tar
porque no puedo comprimir un directorio solo xz
. ¿Hay un revestimiento para producir, por ejemplo foo.tar.xz
?
directory
tar
compression
LanceBaynes
fuente
fuente
man 1 xz
diceit'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 para más información.Respuestas:
Suponiendo que
xz
respeta el conjunto estándar de indicadores de línea de comandos, incluidos los indicadores de nivel de compresión, puede intentar:fuente
-9e
es el mejor nivel, pero llevará mucho tiempo-9e
no siempre le dará el mejor resultado - vea el punto 8 aquí rootusers.com/13-simple-xz-examples--threads=0
a xzCon un GNU reciente
tar
en bash o shell derivado:El interruptor j minúscula de tar usa bzip, el interruptor J mayúscula usa xz.
La
XZ_OPT
variable de entorno le permite establecerxz
opciones que no se pueden pasar a través de aplicaciones de llamada comotar
.Esto ahora es máximo .
Consulte
man xz
otras opciones que puede configurar (-e
/--extreme
podría darle algún beneficio de compresión adicional para algunos conjuntos de datos).fuente
rc
yakanga
.fish
,csh
,tcsh
Yes
siendo las principales conchas que no lo soportan. Allí, usarías elenv
comando.-9
y-e
xz opta, deseaXZ_OPT=-e9
sino como @krzyk señaló, -e es extremadamente lentaXZ_OPT
no es una característica implementada entar
. Es una característica dexz
. Cuando setar
llamaxz
, la variable env simplemente se pasa.es incluso mejor que
fuente
option -e, --extreme
Modifique el preajuste de compresión (-0 ... -9) para que se pueda lograr una relación de compresión un poco mejor sin aumentar el uso de memoria del compresor o descompresor (excepción: el uso de memoria del compresor puede aumentar un poco con los preajustes -0 ... -2). La desventaja es que el tiempo de compresión aumentará dramáticamente (puede duplicarse fácilmente).-9
no debería usar-9e
, ¿sí?XZ_OPT="-9e -T0" tar -cJf ...
Si tiene 16 GiB de RAM (y nada más en ejecución), puede intentar:
Esto necesitará 1.5 GiB para la descompresión, y aproximadamente 11 veces más que para la compresión. Ajuste en consecuencia para menores cantidades de memoria.
Esto solo ayudará si los datos son realmente tan grandes, y en cualquier caso no ayudará TANTO , pero aún así ...
Si está comprimiendo archivos binarios, agregue --x86 como la primera opción xz. Si está jugando con archivos "multimedia" (audio sin comprimir o mapas de bits), puede probar con --delta = dist = 2 (experimente con el valor, los buenos valores para probar son 1..4).
Si te sientes muy aventurero, puedes intentar jugar con más opciones de LZMA, como
(esta es la configuración predeterminada, puede probar valores entre 0 y 4, y lc + lp no debe exceder 4)
Para ver cómo se asignan los valores predeterminados predeterminados a estos valores, puede consultar el archivo fuente src / liblzma / lzma / lzma_encoder_presets.c. Sin embargo, no hay nada de mucho interés (-e establece la longitud agradable en 273 y también ajusta la profundidad).
fuente
Puede probar diferentes opciones, para mí -4e funciona mejor
Probé ejecutando:
Entonces, parece que la opción -4e funciona un poco mejor que -9e.
fuente
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
usar archivosxz
.tar --help
:-I, --use-compress-program=PROG
también comprimir con compresores externos:
descomprimir compresores externos:
Listar compresores externos de archivo:
fuente
-I
agregara una explicación de la opción .tar
El comando usa laJ
bandera para los archivos xz. Un ejemplo:tar -cJvf foo.tar.xz foo/
fuente
J
ya fue mencionado en la respuesta de BdowningPara aquellos interesados,
-e9
es 0.4% más pequeño, 20% más lento en la compresión, 3% más lento para la descompresión, en comparación con-9
una computadora portátil típica. Aquí están los tiempos de ejecución en la estructura del directorio del código fuente de Python.Compresión:
Descompresión:
Tamaño del archivo:
fuente
Esta no es una respuesta exacta a su pregunta, pero podría usar un comando en lugar de dos:
agrega todos los archivos del directorio "dir1" al archivo archive.7z usando "ultras ettings"
Otros formatos soportados son: zip, gzip, bzip2 o tar. para esto solo reemplace
7z
después-t
.--fuente
man 7z
NOTA: no use este comando para hacer una copia de seguridad de los archivos de su sistema, excepto los archivos personales porque el formato 7z no almacena los permisos del sistema de archivos .
fuente
En una máquina multinúcleo de la versión v5.2.0 de xz-utils, verifique:
Si desea utilizar el número máximo de núcleos y la compresión máxima:
O establezca -T en la cantidad de núcleos que desea usar.
Entonces:
También esto puede ser útil para elegir el nivel de compresión:
https://catchchallenger.first-world.info/wiki/Quick_Benchmark:_Gzip_vs_Bzip2_vs_LZMA_vs_XZ_vs_LZ4_vs_LZO
fuente
Si desea que esto se complete más rápido, utilizando múltiples subprocesos, pero sin ralentizar su sistema mientras realiza otro trabajo, intente agregar
-Tn
donde n es cuántos subprocesos desea usar, así comonice
disminuir la compresión a la prioridad de inactividad.Modelo (para 4 hilos):
Intente verlo
top
ohtop
cuando lo haga en un directorio grande (varios GB). Con suerte, debería ver variosxz
hilos con un buen valor de 19 (prioridad más baja).También eliminé esto para que sea tan claro como sensato, como por ejemplo: las
-f -
otras respuestas simplemente no son necesarias, ya quetar
el resultado predeterminado es stdout.También puede realizar
nice
el proceso de tar, pero nunca lo he encontrado necesario, ya quexz
siempre obstaculiza la CPU para la tubería.Nota práctica, rara vez lo uso
xz -9
para algo, no tanto por la CPU o el tiempo, sino por las altas demandas de memoria. Eche un vistazo a https://catchchallenger.first-world.info/wiki/Quick_Benchmark:_Gzip_vs_Bzip2_vs_LZMA_vs_XZ_vs_LZ4_vs_LZO#Memory_requirements_on_compression . Elxz
compresor, comobzip2
, pero a diferenciagzip
, usa más memoria para factores de compresión más altos. En conjunto, con esoxz
usa mucha más memoria que cualquier otro compresor, puede usar fácilmente más de 600 MB de memoria. Y si utiliza el-T
para habilitar la compresión roscada, las demandas de memoria aumentan aún más. Solo algo a tener en cuenta, como si está ejecutando un pequeño servicio en una pequeña VM con 1-2 GB de memoria, podría causar un impacto inadvertido.fuente
En Mac OS X, un enfoque alternativo para pasar el parámetro
tar
es usar una--options=
bandera. Por ejemplo,fuente