Necesito para comprimir un archivo de gran tamaño, de alrededor de 17 a 20 GB. Necesito dividirlo en varios archivos de alrededor de 1 GB por archivo.

He buscado una solución a través de Google y encontrar maneras de utilizar split y cat comandos. Pero no funciona para archivos de gran tamaño en todo. También, que no funcionan en Windows, necesito extraer en una máquina Windows.

  • Siento tu dolor, pero este no parece ser la programación relacionada con.
  • Muchos programas de compresión (por ejemplo, como 7-Zip) es capaz de dividir el archivo comprimido en volúmenes de un tamaño especificado para facilitar su distribución.
  • Esto pertenece en superuser.com pero la beta privada no empieza hasta mañana, que me dice.
  • ¿Puedo preguntar por qué necesita ese archivo comprimido?
  • Si una de las dos soluciones viables publicado aquí no filtra hacia fuera, él va a necesitar una solución de programación.
  • El aprobado de la respuesta a esta pregunta, se muestra cómo se puede hacer esto usando Python y el módulo subprocess: stackoverflow.com/questions/4368818/… (Python es un lenguaje de secuencias de comandos disponible para Windows, así que hay una probabilidad de que esto podría funcionar…)

InformationsquelleAutor Aka | 2009-07-13

4 Comentarios

  1. 242

    Puede utilizar el split comando con el -b opción:

    split -b 1024m file.tar.gz

    Se puede montar en una máquina Windows con @Josué‘s respuesta.

    copy /b file1 + file2 + file3 + file4 filetogether

    Editar: Como @Charlie indicado en el comentario de abajo, puedes establecer un prefijo explícitamente porque va a utilizar x de otra manera, que puede ser confuso.

    split -b 1024m "file.tar.gz" "file.tar.gz.part-"
    
    // Creates files: file.tar.gz.part-aa, file.tar.gz.part-ab, file.tar.gz.part-ac, ...

    Editar: Editar el post porque la pregunta es cerrada y la solución más efectiva es muy cerca de el contenido de esta respuesta:

    # create archives
    $ tar cz my_large_file_1 my_large_file_2 | split -b 1024MiB - myfiles_split.tgz_
    # uncompress
    $ cat myfiles_split.tgz_* | tar xz

    Esta solución evita la necesidad de usar un archivo de gran tamaño intermedio cuando (de)la compresión. El uso de la tar-C opción para utilizar un directorio diferente para los archivos resultantes. por cierto, si el archivo consta de un solo archivo tar podrían evitarse y sólo utiliza gzip:

    # create archives
    $ gzip -c my_large_file | split -b 1024MiB - myfile_split.gz_
    # uncompress
    $ cat myfile_split.gz_* | gunzip -c > my_large_file

    Para windows se puede descargar portado versiones de los mismos comandos o usar cygwin.

    • si no agrega un prefijo como el último argumento después de que el nombre del archivo a dividir obtener la salida en archivos con el nombre xaa, xab, xac, xad….
    • gracias, he actualizado mi respuesta.
    • En realidad el uso de -b 1024MiB dio un error de que no se trataba de un número no válido de bytes. El uso de --bytes=1024m obras.
    • Y usted no tiene que usar cat para volver a montar el archivo. Usted puede utilizar copy /b file1 + file2 + etc.. en Windows, a continuación, copia de Linux y el alquitrán puede leer a montar el archivo tar. Yo sólo lo intentó.
    • Split tiene la opción de --numeric-suffixes: el uso de sufijos numéricos en lugar de caracteres alfabéticos.
    • Si usted prefiere el prefijo que consta de la original para evitar prefijo de nombre de adivinar usando bash variables, uso: file=myfile.tar.gz seguido por split -b 1024m $file ${file}-part-. Re-ensamblaje utilizando cat ${file}-part-* > $file
    • Es buena idea usar --verbose opción a la hora de dividir archivos de gran tamaño.

  2. 25

    Si usted está partiendo desde Linux, usted todavía puede volver a montar en Windows.

    copy /b file1 + file2 + file3 + file4 filetogether
    • También puede utilizar copy /b file* filetogethersupport.microsoft.com/kb/71161
    • Que sólo funciona correctamente en NTFS y si los archivos están en NTFS orden de ya. Pruébalo en FAT o FAT32 = auge.
    • +1 asegúrese de que los archivos están en el orden correcto!
    • Para ser justos, si no, has hecho un mal trabajo de nomenclatura.
    • Usted sabe acerca de FAT32 malo directorio de la reordenación de los hábitos de derecho?
  3. 7

    Probado el código, inicialmente se crea un único archivo, a continuación, divide:

     gzip -c file.orig > file.gz
     CHUNKSIZE=1073741824
     PARTCNT=$[$(stat -c%s file.gz) / $CHUNKSIZE]
    
     # the remainder is taken care of, for example for
     # 1 GiB + 1 bytes PARTCNT is 1 and seq 0 $PARTCNT covers
     # all of file
     for n in `seq 0 $PARTCNT`
     do
           dd if=file.gz of=part.$n bs=$CHUNKSIZE skip=$n count=1
     done

    Esta variante se omite la creación de un archivo único y va directamente a la creación de piezas:

    gzip -c file.orig |
        ( CHUNKSIZE=1073741824;
            i=0;
            while true; do
                i=$[i+1];
                head -c "$CHUNKSIZE" > "part.$i";
                [ "$CHUNKSIZE" -eq $(stat -c%s "part.$i") ] || break;
            done; )

    En esta variante, si el archivo tamaño del archivo es divisible por $CHUNKSIZE, entonces el último parcial del archivo tamaño del archivo 0 bytes.

    • Eso es lo que split hace ya.
    • El OP dice que la división no funciona.
    • ephemient Hey, he cavar algunos post buscando sólo PARA ESO. Yo no tengo ninguna división ni zip comandos/binarios en un determinado dispositivo, y esto ha funcionado perfectamente. Voy a preparar este código para que funcione como la división de comando :). Gracias @Adrian Panasiuk. Eso es perfecto para mí.
    • Eres bienvenido, me alegro de ayuda!
    • Pero, lo he probado y el resultado fue un completo archivo, no dividir. ¿Cómo puede ser? Fue un gran archivo en un dispositivo pequeño, así que fue un proceso largo. Por favor, comprobar las soluciones, mientras que la publicación 🙁
    • Nunca se nos dijo que se necesita para evitar la creación de un archivo temporal! Por favor, consulte la segunda variante!
    • Yo estaba equivocado acerca de la 1º script, funciona perfecto, fue mi error acerca de la CHUNKSIZE variable. NO hay ninguna razón para crear una gzip archivo intermedio. Puede ejecutar todos en un solo comando con un tubo. Ambos ejemplos de obras que uno hace con dd y los otros usos de la cabeza de datos de contenedor. Mi principal problema era la falta de split/zip de los archivos binarios y los que ambas soluciones son lo que te pido para cuando vaya dentro de eso. Thx de nuevo.
    • He resuelto mi problema ayer usando 7zip con -v200m opción. Pero más tarde vuelvo y probar el tuyo y a ver mi error 😀
    • gracias, el comando dividir fue lo que resulta en un completo archivo con ningún partido para mí también, mientras que su guión trabajado. Nota: si en un MacOS, a continuación, sustituir «stat -c%s» con «stat -f%z»

Dejar respuesta

Please enter your comment!
Please enter your name here