Dividir y juntar archivos desde la linea de comandos

sábado 18 junio 2011 | In English

Aunque algunos programas para comprimir nos ofrecen la opción de dividir los archivos, esto puede hacerse fácilmente con dos comandos: split y cat.

Temas
Dividiendo un archivo con split
Juntando las partes que fueron creadas con split
Dividiendo archivos por lineas

Dividiendo un archivo con split

split solo necesita el tamaño de las partes que queremos crear, y el archivo que queremos dividir, por ejemplo:

split -b 1024 archivo_a_dividir.bin

Si este archivo tiene un tamaño de 6 kibibytes, creará 6 archivos de un kibibyte cada uno, nombrados xaa, xab, xac, xad, xae y xaf.

El parámetro -b es lo que define el tamaño de las partes resultantes. Puedes usar sufijos, ya sea los sufijos de SI KB (Kilobyte: 1000 bytes), MB (Megabyte: 1000×1000), GB (Gigabyte: 1000×1000×1000), TB, PB, EB, ZB, YB. O puedes utilizar los sufijos de IEC K (Kibibyte: 1024 bytes), M (Mibibyte: 1024×1024), G (Gibibyte: 1024×1024×1024), T, P, E, Z, Y. Por ejemplo:

split -b 1K archivo_a_dividir.bin
split -b 10M archivo_a_dividir.bin
split -b 1KB archivo_a_dividir.bin
split -b 10MB archivo_a_dividir.bin

Los ejemplos pasados crearían partes de 1,024 bytes, 10,485,760 bytes, 1,000 bytes y 10,000,000 bytes respectivamente.

Si no queremos el prefijo por default x, podemos cambiarlo agregando el nuevo prefijo después del nombre del archivo que queremos dividir, por ejemplo:

split -b 1024 archivo_a_dividir.bin parte_

Si estamos dividiendo un archivo de 6 kibibytes como en el primer ejemplo, esto generaría los archivos: parte_aa, parte_ab, parte_ac, parte_ad, parte_ae y parte_af.

Podemos cambiar la longitud del sufijo en los archivos resultantes, y podemos elegir entre un sufijo basado en el alfabeto (el default) o un sufijo numérico. Cuantas partes podemos crear depende de estas dos características del sufijo. Si conservamos la longitud predeterminada de 2, y no utilizamos un sufijo numérico, podemos dividir el archivo en hasta 676 partes. Si split se queda sin sufijos para usar, fallará, dejándonos con los archivos creados hasta el momento en que falló.

Para cambiar la longitud de el sufijo utiliza el parámetro -a seguido de un número. Por ejemplo:

split -b 1024 -a 4 archivo_a_dividir.bin

Siguiendo el primer ejemplo dado de nuevo, terminaríamos con los archivos: xaaaa, xaaab, xaaac, xaaad, xaaae y xaaaf.

Para usar un sufijo numérico usa el parámetro -d, por supuesto que con un sufijo numérico y una longitud de 2 podemos dividir un archivo en a lo mucho 100 partes. Por ejemplo:

split -b 1024 -d archivo_a_dividir.bin

Y usando el primer ejemplo una última vez, terminaríamos con los archivos: x00, x01, x02, x03, x04 y x05.

Juntando las partes que fueron creadas con split

Debido a que los archivos creados con el comando split son secuenciales, podemos simplemente usar cat para juntarlos en un nuevo archivo, por ejemplo:

cat x?? > archivo_reconstruido.bin

El signo de interrogación actúa como caracter comodín. Cuantos signos de interrogación usamos por supuesto depende de la longitud de los sufijos usada al crear las partes.

Dividiendo archivos por lineas

split también nos permite dividir un archivo de texto por lineas en vez de por el tamaño de las partes resultantes. Estoy seguro que esto fue muy útil en algún punto en el pasado, pero no puedo pensar en una razón para dividir un archivo de texto por lineas fuera de propósitos experimentales o didácticos, los procesadores de texto son bastante capaces de manejar grandes archivos de texto (que bien, apenas unos días despues de escribir esto encontré una buena aplicación,dividir largas listas de URLs y dividir esos largos archivos de MySQL llenos de comandos para poder subirlo a aquellos sistemas web que no pueden manejar archivos grandes, dejé este comentario por propósitos humorísticos). De cualquier manera, el parámetro para dividir un archivo de texto por lineas es -l seguido del número de lineas. Por ejemplo:

split -l 20 archivo_a_dividir.txt

Esto creará un archivo por cada grupo de 20 lineas en el archivo original, así que si el archivo tiene 54 lineas, crearía los archivos xaa (lineas 1-20), xab (lineas 21-40) y xac (lineas 41-54).

Existe otra opción en split, una mezcla entre dividir el archivo por tamaño en bytes y por número de lineas. En este modo especificamos el tamaño máximo en bytes para las partes, y split meterá tantas lineas completas como sea posible en cada parte sin excederse de el tamaño especificado en bytes. Para eso utilizamos el operador -C seguido de un número que representa el tamaño en bytes, puedes utilizar cualquiera de los sufijos que son válidos para la opción -b. Por ejemplo: asume que tenemos un archivo que contiene 20 lineas de 100 letras cada una, teniendo en total 2000 bytes, y utilizamos el siguiente comando:

split -C 512 archivo_a_dividir.txt

Esto nos daría los archivos: xaa (lineas 1-5, debido a que la sexta linea, teniendo 100 letras, no ajustaría entro de los 512 bytes que configuramos como límite), xab (lineas 6-10), xac (lineas 16-20) y xad (lineas 16-20). Cada archivo tendría un tamaño de 500 bytes.

Categorías: Comandos, FOSS, Linux