¿Cuáles son las mejores opciones para usar al comprimir archivos con 7 Zip?


62

A menudo tengo que recopilar archivos de registro y subirlos a un servidor central (propiedad de otra empresa). El servidor central tiene un límite de tamaño del archivo, por lo que estoy tratando de crear el archivo más pequeño posible que todavía esté en formato zip.

¿Cuál es la mejor configuración para usar al comprimir un archivo de texto a un formato zip cuando mi única necesidad es un tamaño de archivo pequeño?

Opciones de 7zip

He hecho la compresión ultra obvia y elegida, y he notado que LZMA hace un mejor trabajo que desinflar, pero hay demasiadas otras opciones de opciones para que pueda probarlas todas.


1
¿Es una opción dividir el zip en varios archivos?
JaredMcAteer

3
Tan pronto como elija cualquier cosa que no sea el Deflateformato, ya no es un archivo .zip "normal", sino un archivo zip "extendido", promovido por WinZip. Originalmente mantuvieron la extensión como .zip, para mucha consternación (ya que la mayoría de las herramientas normales de manejo de zip no pueden manejarlas), pero la mayoría de los archivadores usan .zipx ahora para distinguirlos de los archivos .zip tradicionales. Si puede usar LZMA, cambie a .7z y elija PPMd; debería comprimir mejor (¡y más rápido!) Para archivos de texto.
Afrazier

1
@afrazier: "La especificación de formato de archivo .ZIP documenta los siguientes métodos de compresión: almacenado (sin compresión), encogido, reducido (métodos 1-4), Imploded, Tokenizing, Deflated, Deflate64, bzip2, LZMA (EFS), WavPack, PPMd ". en.wikipedia.org/wiki/Zip_%28file_format%29#Compression_methods
endolith

1
@endolith: bzip2, lzma, wv y ppmd son adiciones muy recientes al formato de archivo. Ni siquiera es seguro asumir que su destinatario puede manejar deflate64, y mucho menos cualquier cosa más nueva.
Afrazier

1
definir "herramientas zip normales". La mayoría de las "herramientas zip normales" hoy en día, como 7z y winrar, pueden extraer archivos 7z.
phuclv

Respuestas:


61

Para crear el archivo ZIP estándar más pequeño que 7-Zip puede crear, intente:

7z a -mm=Deflate -mfb=258 -mpass=15 -r foo.zip C:\Path\To\Files\*

Fuente: ¿Cómo puedo lograr la mejor compresión ZIP estándar?

De lo contrario, si no le importa el estándar ZIP, use la siguiente configuración ultra:

7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on archive.7z dir1

Que son:

-t7z   7z archive

-m0=lzma
       lzma method

-mx=9  level of compression = 9 (Ultra)

-mfb=64
       number of fast bytes for LZMA = 64
-md=32m
       dictionary size = 32 megabytes

-ms=on solid archive = on

2
@Tek: ¿Por qué? No es bueno. La pregunta era sobre el uso del "formato ZIP estándar", por lo que la respuesta no debería especificar LZMA. -ms = on es para .7z, no para archivos zip estándar. -md está relacionado con BZip2, por lo que no espero que afecte a ZIP (o incluso a LZMA). -mfb = 64 es un valor no optimizado: -mfb = 258 crea archivos zip más pequeños. Y esta respuesta ni siquiera menciona -mpass = 15 que puede afectar a los archivos zip. Esta es una respuesta bien formateada que, desafortunadamente, es incorrecta en múltiples formas.
TOOGAM

66
Usaría lzma2
Lance Badger

Si mira las preguntas frecuentes de 7-zip, indica que las versiones más nuevas de 7z pueden tener un peor rendimiento que las versiones anteriores en algunas circunstancias. Lea las preguntas frecuentes para obtener más detalles, pero en resumen use las 'qs' en el campo Parámetros en la GUI o use -mqs en la versión de línea de comandos para usar el método anterior de ordenar por extensión de archivo. 7-zip.org/faq.html .
drojf

13

Si puede usar el formato .7z en lugar de solo .zip, simplemente usaría PPMD con las siguientes opciones y dejaría todo lo demás según lo establecido por el Nivel de compresión:

  • Formato de archivo: 7z
  • Método de compresión: PPMD
  • Nivel de Compresión: Ultra

Comprimo regularmente registros de servidor / texto (60 MB +) usando estas opciones y generalmente salen al 1-2% del tamaño original.


Para texto como archivos de registro, ppmd es definitivamente el camino a seguir. Sin embargo, la pregunta mencionó que necesitaba permanecer en el formato zip, lo que puede no funcionar con PPMD.
Brian Minton

Acabo de probar zip con PPMD ​​y Windows Explorer abre el contenido sin quejas aquí en Windows 7
Umber Ferrule

3
Me di cuenta de eso también. Abre el contenido muy bien. Sin embargo, cuando realmente intenté ver uno de los archivos dentro del archivo zip, falló.
Brian Minton

2
¿Por qué el método de compresión PPMD ​​es superior para archivos de texto?
user598527

1
LZMA2 ofrece mejores resultados para archivos de texto que PPMD.
T3rm1

7

Comparo para db.fdb 1,2 GB (1236598784 B) en el servidor Ubuntu 14.04.03 con p7zip [64] 9.20 en VM:

1. 7z a -mx=9 1.7z db.fdb
2. 7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on 2.7z db.fdb
3. 7z a -t7z -m0=lzma -mx=9 -mfb=258 -md=32m -ms=on 3.7z db.fdb
4. 7z a -t7z -m0=lzma -mx=9 -mfb=258 -md=32m -ms=on -pass=15 4.7z db.fdb
5. 7z a -mx=9 -mmt=on 5.7z db.fdb
6. 7z a -t7z -m0=lzma -mx=9 -mfb=258 -md=32m -ms=on -mmt=on 6.7z db.fdb

y tener ese resultado:

1.7z 96 MB (100108731 B) with 6' 25"
2.7z 95 MB ( 99520375 B) with 5' 18"
3.7z 93 MB ( 97512311 B) with 9' 19"
4.7z 93 MB ( 97512345 B) with 9' 40"
5.7z 96 MB (100108731 B) with 5' 26"
6.7z 93 MB ( 97512311 B) with 9' 09"

Creo que el segundo método funciona bien = (casi) la mejor compresión con el mejor tiempo. Pero para una mejor "vista" y fácil de recordar es el primer método, con archivos pequeños y sin punto de compresión máxima. Entre el método 2 y 3 no obtenemos 7z más pequeños, pero pagamos casi dos veces más por la compresión. Cualquiera decida con los suyos.


7

Después de mucha experimentación, profundizando en la documentación detallada de 7zip y leyendo parte del código fuente de 7z con respecto a los parámetros avanzados de LZMA2, aquí hay un mejor método a continuación. Redujo algunos archivos de prueba del mundo real de 1 GB más de 2 a 4 veces mejor que las soluciones aceptadas anteriormente publicadas aquí o incluso en la página de manual de 7z.

7z a -t7z -mx=9 -mfb=273 -ms -md=31 -myx=9 -mtm=- -mmt -mmtf -md=1536m -mmf=bt3 -mmc=10000 -mpb=0 -mlc=0 archive.7z inputfileordir

Aquí se supone la compresión LZMA2, pero es posible que pueda obtener un rendimiento aún mejor en 7zip al pasar opciones avanzadas de LZMA2 como -m0=LZMA2:27, o -m0=LZMA2:d25, o una serie de parámetros como

-m0=BCJ2 -m1=LZMA:d25 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1

Tales parámetros no parecían respetados por las versiones 7z que probé, pero es posible que desee explorar más a fondo o parchear el código 7z para analizarlos correctamente. O tal vez se supone que funciona y simplemente se rompe en las compilaciones que se probaron.


wow, esto hizo una gran diferencia. Para mi archivo, experimenté con muchas otras sugerencias, incluidas otras respuestas aquí, y el mejor resultado que obtuve fue 99 MB, frente a 85 MB con esta configuración.
user9399

0

Establezca el campo "dividir en volumen, bytes" en el tamaño de archivo máximo permitido del servidor (en bytes, creo, aunque parece que acepta abreviaturas comunes como "KB" y "MB"). Si el archivo zip excede ese tamaño, 7-zip lo dividirá en múltiples archivos automáticamente, como Integration_serviceLog.zip.001 , Integration_serviceLog.zip.002 , etc. disquetes.) Necesitará que todos los archivos estén presentes para descomprimirlos. Úselo en lugar de preocuparse por la mejor configuración de compresión absoluta para un conjunto particular de archivos, porque lo que es mejor para un archivo puede ser diferente para otro archivo, y no desea tener que pasar por esto cada vez que lo necesite. copiar registros.


1
Me preocupa cómo la gente del otro lado descomprimirá los archivos. Necesito que sea lo más simple posible para ellos. ¿Sabes si puedes descomprimir los volúmenes divididos usando el zip integrado de Windows o gzip?
jjnguy

Aparentemente, no, la función integrada de carpeta zip de Windows no incluye archivos zip distribuidos. Eso es una lástima, ya que ha sido una característica estándar del formato desde antes de Windows 3. Sin embargo, me sorprendería mucho si gzip no pudiera hacerlo. WinZip definitivamente puede.
Rob Kennedy
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.