¿Cómo comprimir una carpeta grande en archivos pequeños limitados a 20Mb?

10

Estoy buscando la forma de comprimir una carpeta grande en muchos archivos de 20Mb. No quiero que el archivo zip se divida en otros más pequeños. En cambio, quiero agrupar algunos subarchivos / carpetas en grupos que son 20Mb cuando están comprimidos.

Si sabes cómo hacerlo, ¡por favor ayuda!

Actualizar

Necesito usar solo los archivos comprimidos más pequeños que pueden descomprimirse solos.

Mi intención es usar virustotal.com para escanear una carpeta grande.

Nam G VU
fuente
¿Algún detalle sobre el sistema operativo que estás usando?
Pitto
@Pitto uso Windows-7
Nam G VU

Respuestas:

10

En winzip: agregue los archivos al zip ya sea iniciando winzip y agregando o arrastre y suelte en winzip o haga clic derecho en los archivos y winzip 'agregar a zip ...'

Luego en winzip:

Acciones: dividir en la parte inferior de 'tamaño de pieza', elegir 'otro tamaño', luego poner 20 y seleccionar mb

¡Hecho!

adolf ajo
fuente
44
Mantenerse en el lado libre también 7zip funciona perfectamente :)
Pitto
3
Esto dividirá el archivo zip, y no podemos usar solo las partes divididas.
Nam G VU
Omg ahora entiendo mejor lo que está buscando ... Simplemente no puedo encontrar ningún tipo de solución a su problema, entonces :( ¿Qué pasa con el uso gratuito y maravilloso Antimalware Malwarebytes para escanear los archivos localmente?
Pitto
6

Lo que está proponiendo es esencialmente una variación del problema de la mochila , con el giro adicional de que, debido a la compresión de archivos, no comienza sabiendo cuánto ocupará su mochila de 20 MB en cada elemento.

La solución trivial, por supuesto, sería simplemente comprimir cada archivo de forma independiente, pero eso no reduce el recuento de archivos, por lo que sospecho que no sería una solución satisfactoria.

Si se me presentara este problema, supongo que comenzaría comprimiendo cada archivo individualmente en una ubicación temporal (o en la memoria, sin escribirlos en el disco), solo para poder obtener un tamaño comprimido aproximado para cada uno. Con esa información, sería posible decidir qué archivos deberían agruparse por cualquiera de los enfoques estándar para el problema de la mochila y crear los archivos zip reales.

Suponiendo que tenga un lenguaje de script disponible y sepa cómo usarlo, esperaría que este enfoque sea bastante sencillo de automatizar; hacerlo manualmente sería bastante tedioso si tienes más de un puñado de archivos con los que lidiar ...

Dave Sherohman
fuente
1
¿no puedes comprimir sin 'compresión'? Mirando la "actualización" de la operación, parece que el formato del archivo es más importante que la compresión.
Caro
1
Je ... Buen punto. No había considerado el uso de zip como un simple archivo sin comprimir.
Dave Sherohman
@DaveSherohman Entonces, ¿cómo podemos hacerlo entonces?
Nam G VU
5

Dejar que Zip haga la división por usted será mucho más fácil de automatizar que tratar de resolverlo usted mismo. Si su objetivo son los archivos zip de 20 MB, deberá estimar el tamaño comprimido de cada archivo antes de agregarlo al archivo. ¿Hay alguna razón por la que no quieras dejar que Zip haga la división por ti? Así es como lo harías con gnu zip:

zip -s 20m -r myzip.zip mydir

Esto creará archivos comprimidos de 20 MB con números de índice incrementales en el nombre del archivo.

SethG
fuente
44
Según el comentario de OP a otra respuesta, parece que no quiere que zip lo divida automáticamente porque entonces obtienes un único archivo que requiere que todos los archivos funcionen correctamente, pero quiere que cada pieza sea un archivo completo, utilizable, independiente de los otros
Dave Sherohman
4

En Linux hay un programa llamado zipsplit que hace exactamente esto. Es parte del paquete zip estándar.

Se puede ejecutar así:

zipsplit bigfile.zip -n 20000000

para dividir bigfile.zip en partes de un máximo de 20 MB. Y tenga en cuenta que los archivos contenidos individuales no se dividirán. Por lo tanto, cada parte se puede descomprimir individualmente. Lo que también significa que si hay un solo archivo que no puede caber en el tamaño máximo de parte, la división no será posible.

Actualización: Parece que también hay binarios para Windows en info-zip.org, específicamente en ftp://ftp.info-zip.org/pub/infozip/win32/zip300xn-x64.zip para Win 64.

Zitrax
fuente
3

No es una perspectiva fácil, me temo.

Recientemente escribí una secuencia de comandos para reunir archivos en subdirectorios de no más de 4,3 GB para un fácil almacenamiento en DVD, pero todo fue descomprimido.

Hacerlo con compresión: ahora está el desafío. No puede predecir el tamaño de los archivos después de la compresión: todo lo que puede hacer es seguir agregando archivos al zip en orden descendente de tamaño hasta que exceda los 20 MB y luego eliminar el último archivo reemplazándolo por uno más pequeño hasta que caiga por debajo de 20 MB . Si agota todos los archivos y todavía es> 20 MB, simplemente suelte el último archivo y continúe con el siguiente archivo zip.

Una secuencia de comandos bastante complicada y un proceso bastante lento y doloroso.

Majenko
fuente
Aquí mi pensamiento. ¿Por qué no simplemente agrupar archivos / carpetas en <= 20Mb grupo descomprimido y luego comprimirlos? No necesitamos que los archivos de resultados .zip tengan exactamente 20Mb cada uno.
Nam G VU
Posible, no estoy seguro de cómo hacer eso en Windows con secuencias de comandos, utilicé Perl en Linux antes.
Majenko
2

Sé que este es un hilo viejo, pero acabo de hacer esto con 7-zip .

Debe usar la opción "Dividir en volumen":

ingrese la descripción de la imagen aquí

Kevin Kuszyk
fuente
Frio. Intentaré volver contigo más tarde.
Nam G VU
1
No funciona para este escenario específico porque los archivos comprimidos más pequeños no se pueden descomprimir solos; deben mantenerse juntos.
celestial
2

Dave parecía proporcionar la solución programable más cercana a lo que OP solicitó. Descubrí que esto también podría hacerse manualmente , si se toman las siguientes suposiciones (esto no es un problema técnico puro, es más un problema de organización que técnico):

  1. Dado que el OP requiere que cada archivo zip pueda extraer todo su contenido de forma independiente , los archivos que superan los 20 MB después de la compresión deben manejarse de una de las siguientes maneras:
    • no deben considerarse y, por lo tanto, deben separarse;
    • deben dividirse en volúmenes de 20 MB, como sugieren otras respuestas ( winzip , 7-zip ), y los archivos resultantes no se pueden usar de forma independiente (rompiendo esta primera suposición).
  2. Los archivos comprimidos no necesariamente necesitan tener exactamente 20 MB.
  3. Si es más importante tener varios archivos zip con un tamaño aproximado de 20 MB, entonces se puede comprimir sin compresión.

Al usar este método con 7-zip (interfaz y terminal de Windows), conservé la compresión en los archivos zip recién generados.

Comience comprimiendo todos los archivos en un solo archivo zip en una carpeta vacía (con su método de compresión deseado), por ejemplo ALL.zip, y ábralo:

  1. Ordene la lista de archivos y carpetas haciendo clic en el tamaño o en la columna de tamaño empaquetado (comprimido);
  2. Comience desde los tamaños más pequeños y seleccione los archivos / carpetas que desea agrupar en un zip;
  3. Presione el Testbotón para confirmar su tamaño colectivo (esto considera su compresión): Característica de prueba
  4. Pulse el Extracto Copybotón al tiempo que añade al final de la ruta de extracción nombre de una nueva carpeta (por ejemplo: plu_8MB)
  5. Dentro de ALL.zipzip, elimine estos archivos que acaba de extraer (evitando las extracciones erróneas) y navegue a la siguiente carpeta o subconjunto de archivos;
  6. Repita uno de los siguientes:
    • pasos 1 a 5 si planea crear un archivo zip independiente;
    • pasos 1 a 3 y reutilice el mismo nombre de carpeta (paso 4) hasta que sus tamaños colectivos sean aproximadamente 20 MB;
  7. Una vez que haya extraído todo el contenido de ALL.zipen carpetas independientes, elimine ese zip y abra el terminal en esa carpeta ;
  8. Tipo:

    for /F %i in ('dir /b') do "C:\Program Files\7-zip\7z.exe" a -tzip %i.zip %i
    

    Presione ENTERy esto generará un archivo zip para cada carpeta que acaba de extraer.

CPHPython
fuente
Para diferentes parámetros en la recompresión, aquí está la documentación de la sintaxis de 7zip .
CPHPython