Entonces necesito comprimir un directorio con compresión máxima.
¿Cómo puedo hacerlo xz? Quiero decir que también lo necesitaré tarporque 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 xzdiceit'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
xzrespeta el conjunto estándar de indicadores de línea de comandos, incluidos los indicadores de nivel de compresión, puede intentar:fuente
-9ees el mejor nivel, pero llevará mucho tiempo-9eno siempre le dará el mejor resultado - vea el punto 8 aquí rootusers.com/13-simple-xz-examples--threads=0a xzCon un GNU reciente
taren bash o shell derivado:El interruptor j minúscula de tar usa bzip, el interruptor J mayúscula usa xz.
La
XZ_OPTvariable de entorno le permite establecerxzopciones que no se pueden pasar a través de aplicaciones de llamada comotar.Esto ahora es máximo .
Consulte
man xzotras opciones que puede configurar (-e/--extremepodría darle algún beneficio de compresión adicional para algunos conjuntos de datos).fuente
rcyakanga.fish,csh,tcshYessiendo las principales conchas que no lo soportan. Allí, usarías elenvcomando.-9y-exz opta, deseaXZ_OPT=-e9sino como @krzyk señaló, -e es extremadamente lentaXZ_OPTno es una característica implementada entar. Es una característica dexz. Cuando setarllamaxz, la variable env simplemente se pasa.es incluso mejor que
fuente
option -e, --extremeModifique 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).-9no 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 270txt 109 txt/pdf 135tarusar archivosxz.tar --help:-I, --use-compress-program=PROGtambién comprimir con compresores externos:
descomprimir compresores externos:
Listar compresores externos de archivo:
fuente
-Iagregara una explicación de la opción .tarEl comando usa laJbandera para los archivos xz. Un ejemplo:tar -cJvf foo.tar.xz foo/fuente
Jya fue mencionado en la respuesta de BdowningPara aquellos interesados,
-e9es 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-9una 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
7zdespués-t.--fuente
man 7zNOTA: 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
-Tndonde n es cuántos subprocesos desea usar, así comonicedisminuir la compresión a la prioridad de inactividad.Modelo (para 4 hilos):
Intente verlo
topohtopcuando lo haga en un directorio grande (varios GB). Con suerte, debería ver variosxzhilos 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 quetarel resultado predeterminado es stdout.También puede realizar
niceel proceso de tar, pero nunca lo he encontrado necesario, ya quexzsiempre obstaculiza la CPU para la tubería.Nota práctica, rara vez lo uso
xz -9para 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 . Elxzcompresor, comobzip2, pero a diferenciagzip, usa más memoria para factores de compresión más altos. En conjunto, con esoxzusa mucha más memoria que cualquier otro compresor, puede usar fácilmente más de 600 MB de memoria. Y si utiliza el-Tpara 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
tares usar una--options=bandera. Por ejemplo,fuente