¿Cómo dividir archivos de gran tamaño en otros más pequeños?

Hoy en día nos hemos acostumbrado a disponer de medios de almacenamiento de gran capacidad. Partiendo desde un humilde disco IDE de 10 GB a finales del 2000, he usado otros de 40, 60, 500, y 1000 GB ( 1 TB).  Lo mismo aplica para dispositivos extraíbles. Sin embargo, cuando queremos compartir archivos en la nube, es importante saber cómo dividir archivos de gran tamaño en otros más pequeños. Esto nos permite poder distribuirlos más fácilmente.

El disco de 10 GB al que hago referencia estuvo funcionando hasta no hace mucho en lo que es mi primera computadora. La misma vino con Windows ’98 a finales del 2000. Hoy es un robusto servidor con Debian Jessie. ¡Lo único que le cambié desde ese entonces fue el disco y la fuente!

Cómo dividir archivos de gran tamaño

Linux provee una herramienta muy útil llamada split para lograr este objetivo. Comencemos primero creando un archivo llamado archivoprueba.iso de 2 GB (bs=1M * count=2000) en el directorio actual:

dd if=/dev/zero of=./archivoprueba.iso bs=1M count=2000

En este ejemplo suponemos que deseamos dividir el archivo de 2 GB en partes de 600 MB como máximo. Debido a que 2 GB no es un «múltiplo» de esta cantidad, el último archivo tendrá menor tamaño.

split --bytes 600M --numeric-suffixes archivoprueba.iso archivoprueba.iso.

Con la opción --bytes indicamos el tamaño máximo que deberá tener cada archivo individual. Por otra parte, --numeric-suffixes nos permite agregar un número al final del nombre de cada uno. Finalmente, archivoprueba.iso es el nombre del archivo a dividir, mientras que archivoprueba.iso. es el prefijo de salida.

En la Fig. 1 podemos ver el resultado de las operaciones anteriores:

Dividir archivos de gran tamaño utilizando split
Figura 1 – Dividir archivos de gran tamaño utilizando split

Unir los archivos resultantes una vez en destino

Una vez que hayamos compartido los archivos, podemos regenerar el original muy fácilmente. Nombraremos el archivo destino como archivoprueba.iso.nuevo para distinguirlo del original propiamente dicho:

cat archivoprueba.iso.* > archivoprueba.iso.nuevo

A continuación, podemos comparar archivoprueba.iso con archivoprueba.iso.nuevo utilizando cmp:

cmp archivoprueba.iso archivoprueba.iso.nuevo

Si el comando anterior finaliza con código de salida igual a 0 significa que ambos archivos son iguales byte a byte.

Es importante aclarar que en este ejemplo trivial, con archivos creados a partir de /dev/zero, partes individuales de igual tamaño mantendrán esta igualdad.

Espero que este post les haya resultado de utilidad. ¡Nos leemos en el próximo!

Deja una respuesta