¿Cómo dividir archivos más grandes en partes más pequeñas?

189

Tengo un archivo grande (8 GB por ejemplo). ¿Cómo puedo dividirlo en varias partes, digamos 3 partes iguales, y después de eso, cómo las integro más tarde?

karthick87
fuente
Esto parece ser un duplicado de askubuntu.com/questions/12172/…
Jo-Erlend Schinstad
¿Estás seguro de "Esto parece ser"? Diablos, es exactamente lo mismo. Excepto que aquí está ahora con un bono de "Más ejemplos y alternativas".
Luis Alvarado
Puede ser útil si dices más sobre por qué quieres dividirlo, y si quieres dividirlo solo en subcadenas de bytes o si estás abierto a envolverlos en algún tipo de verificación o etiquetado de errores. Si esto es para ponerlo en medios más pequeños o para transferencias de red, miraría algo así como par2 .
Poolie
referencia cruzada: stackoverflow.com/questions/7764755/…
Trevor Boyd Smith
un forro para dividir por igual por N: (1.) dividir por líneas dividir --lines $ (($ (wc -l <$ {your_filename}) / $ {N})) $ {your_filename} (2.) dividir por división de bytes --bytes $ (($ (wc -c <$ {your_filename}) / $ {N})) $ {your_filename}
Trevor Boyd Smith el

Respuestas:

272

Hay varias maneras de lograr esto. Comencemos con los básicos.

Usando los comandos split y cat :

Vamos a decir que tengo una imagen y es demasiado grande (10 MB). Todo lo que hago es:

split --bytes=1M /path/to/image/image.jpg /path/to/image/prefixForNewImagePieces

y luego para armarlo uso cat:

cat prefixFiles* > newimage.jpg

Por ejemplo:

Suponiendo que estoy dentro de la carpeta donde está la imagen:

split --bytes=1M myimage.jpg new

Si la imagen está dentro de un directorio llamado imágenes, también puede hacer esto:

split --bytes=1M images/myimage.jpg new

Si la imagen está dentro del directorio / home / cyrex / images, puede hacer esto:

split --bytes=1M /home/cyrex/images/myimage.jpg new

(En todos los casos por encima de éste se parte myimage.jpgen trozos de 1 MB y el prefijo del nombre de las piezas con la palabra nueva. Por lo que se vería como newaa, newab, newac, newad...)

Si está dividiendo un archivo de texto y desea dividirlo por líneas, puede hacer esto:

split -l 1000 book.txt new

Lo que dividirá el archivo de texto en archivos de salida de 1000 líneas cada uno. Esta es otra forma de dividir un archivo y se usa principalmente para archivos de texto como registros, volcados de sql, archivos csv, etc.

Entonces los fusiono

cat new* > newimage.jpg

Esta es una forma. Incluso puede cambiar el tamaño de las piezas divididas. Sólo cambia la parte que dice --bytes=1Mque --bytes=1Kpara el 1 kilobyte o 1G para giga, u otro número igual --bytes=4Kde piezas de 4 KB.

Usando Nautilus

Otra forma es la opción de compresión en la interfaz gráfica de usuario de Nautilus. Le da la opción de dividir el archivo o archivos que desea comprimir en tamaños de megabytes más pequeños. Es simple y fácil.

Otra forma más es usar 7z

Suponiendo que tenga una imagen ISO llamada ubuntu.iso, podría hacer esto:

7z a -v5m -mx0 ubuntu.7z ubuntu.iso

Esto creará archivos de 5 MB de tamaño desde ubuntu.iso. El -v5mes el tamaño del volumen para que pueda cambiarlo a 10, 12, 1, 3 y también el m puede cambiarse a k por kilobytes, etc; el -mx0interruptor le dice a 7-Zip que no use compresión, es decir, que divida los datos en partes.

Para extraer solo haz

7z x ubuntu.7z.001

de esta manera extrae el primer archivo y 7z comienza a extraer de los siguientes archivos en orden. Tambien puedes hacer

7z e ubuntu.7z.001

que tiene el mismo efecto aquí.

Luis Alvarado
fuente
2
No incluyó rar ya que aún no es de código abierto (que yo sepa) y no agregué Tar ya que estaba buscando formas fáciles de hacer la división.
Luis Alvarado
Agregue gzip también: 7zip requiere un paquete de instalación iirc
Broam
Por lo que sé, Gzip (como tar) no tiene una opción fácil para dividir el archivo comprimido. En todos los casos, los he visto usando el comando dividir para "dividir" el archivo comprimido. Por lo tanto, no sería un comando sino un grupo de comandos para lograr un solo propósito que se puede hacer con uno solo, como dividir o 7z. Para la instalación de 7Zip (que es el p7zip del paquete completo p7zip) nunca me ha pedido iirc;).
Luis Alvarado
Se agregó división de archivos de texto. Olvidé eso y hoy sucedió que necesitaba dividir un par de archivos CSV. Esto es para esos volcados que necesita tener una cantidad específica de líneas.
Luis Alvarado
10

Usando split -bcon el número apropiado, puede obtener tres piezas.

El número podría ser:

size=$(wc -c <"file name")
one_third=$((size/3+1))

Para volver a armar, use cat

cat "file name"* > "file name"

Las páginas del manual ayudarán a completar los detalles.

enzotib
fuente
1
También puede usar split --numberpara permitir splitcalcular la cantidad de archivos por usted: askubuntu.com/questions/54579/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
4

HJSplit

Es un popular programa gratuito para dividir y recombinar archivos. El programa está disponible en Windows, Linux y una variedad de otras plataformas.

HJSplit para Linux es un divisor de archivos gratuito para Linux con una interfaz gráfica de usuario completa. HJSplit admite archivos de más de 100 Gigabytes, Split, Join / Recombine, sumas de comprobación MD5, comparación de archivos, "ejecutar sin instalar" y el programa es totalmente portátil.

HJSplit para Linux no necesita ser instalado y no depende de ninguna biblioteca especial. Simplemente extraiga el archivo hjsplitlx.tar.gz en un directorio de su elección e inicie el programa desde el administrador de archivos de Linux o desde una ventana de terminal. Es posible que deba ajustar los permisos de archivo del programa a 'ejecutable'.

ingrese la descripción de la imagen aquí

Uri Herrera
fuente
1
Debo decir que el archivo de Windows también funciona en Linux.
Uri Herrera
2
Hay varias formas de dividir / unir un archivo antes de tener que ir a un programa como este. Prefiero usar las poderosas opciones que ofrece Linux y para dividir / fusionar archivos, tiene algunas formas bastante rápidas y seguras de hacerlo.
Luis Alvarado
3
Es seguro, rápido, y es multiplataforma que incluye LINUX, no es una aplicación de WINDOWS que también se ejecuta en Linux también ...
Uri Herrera
2
Yo uso HJSplit, es genial y simple. No es necesario escribir comandos y nombres de parámetros cuando solo puede llenar los valores de los parámetros en cuadros de texto.
Matthew leyó el
2
Y ser una descarga gratuita lo empeora porque? y debo decir que EN NINGÚN LUGAR EN EL OP PIDE SOFTWARE GRATUITO (que es gratis) y a lo que se refiere se llama ABIERTO, ¿hay alguna diferencia?
Uri Herrera
3

HOZ - Hacha Open Zource v1.65 - http://hoz.sourceforge.net/

ingrese la descripción de la imagen aquí

Del desarrollador:

OZ es lo que llamarías un 'divisor de archivos'. Su formato de archivo es el mismo que el utilizado por el software 'Hacha', un conocido divisor en España y América Latina. HOZ es una implementación C de código abierto y portátil de un divisor compatible 'Hacha'.

HOZ es más pequeño y más rápido que 'Hacha'.

por cierto, usé una 'Z' en lugar de una 'S' en 'Zource' porque 'hoz' es 'hoz' en español, y dado que 'hacha' es la palabra española para 'ax' ...

Después de la instalación, puede usar la GUI de Hoz colocando ghozun terminal. La operación es tan simple que no necesita explicación, pero se puede obtener más información en el sitio del desarrollador.

¡Buena suerte!

Geppettvs D'Constanzo
fuente
0

Leñador

Una utilidad gratuita de división y fusión de archivos desarrollada en Java. Es una aplicación de tamaño pequeño que permite al usuario dividir cualquier tipo de archivo en tamaños más pequeños en KB, MB o GB.

Está disponible tanto para Linux como para Windows.

WoodCutter ofrece 3 formas de fusionar los archivos originales. WoodCutter crea un archivo de fusión que la aplicación WoodCutter puede procesar para unir todos los archivos. En caso de que el receptor de archivos divididos no tenga WoodCutter instalado, también se puede obtener el archivo original, ya que WoodCutter también crea un archivo por lotes y un archivo de script Shell para fusionar los archivos. El archivo por lotes se usará en la plataforma Windows y el script Shell se usará en las plataformas Linux.

http://java-puzzle.blogspot.com/2009/07/woodcutter.html

Manas
fuente
2
La licencia es "freeware". Creo que una herramienta de software libre que está en los repositorios es una mejor solución.
Broam
0

split --number

Esta es una buena opción para generar N archivos con el mismo tamaño, excepto el último que podría ser más grande debido a la indivisibilidad. P.ej:

printf '0123456789' > f.txt
split -d --number 2 f.txt f.txt.part.
tail f.txt.part.*

da:

==> f.txt.part.00 <==
01234
==> f.txt.part.01 <==
56789

y:

split -d --number 3 f.txt f.txt.part.
tail f.txt.part.*

da:

==> f.txt.part.00 <==
012
==> f.txt.part.01 <==
345
==> f.txt.part.02 <==
6789

En comparación con el -bcálculo de tamaño explícito +, que se mencionó en: https://askubuntu.com/a/54584/52975 , el último archivo puede ser casi 2 veces más grande que los anteriores, lo que a veces es una desventaja de esta opción. Sin embargo, es más conveniente muchas veces, ya que no tiene que hacer el cálculo del tamaño usted mismo.

Se solicitó la misma cantidad de líneas en: https://stackoverflow.com/questions/2016894/how-to-split-a-large-text-file-into-smaller-files-with-equal-number-of-lines

Probado en split2.28, Ubuntu 18.04.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
fuente