Hace un tiempo explicaba como dividir un archivo de texto usando sed. El problema de este método es que no sirve para archivos binarios y que hay que hacer una estimación a ojo de la longitud del corte. En esta entrada se explica un método mejor para dividir cualquier tipo de archivo o directorio de forma automática. Este método funciona directamente en sistemas operativos tipo UNIX, como Mac OS X o Linux, donde vienen instalados por defecto tar y split.
Como explicábamos antes, el tamaño máximo de archivo en un sistema FAT32 es de 4GiB. Si queremos transportar un archivo de tamaño mayor en un disco duro o una memoria USB formateada con este sistema de ficheros, necesitaremos dividirlo.
División del archivo
El archivo se empaqueta y comprime usando tar y se divide en trozos de 4000 MB usando split. Finalmente se copia en el dispositivo de destino:
tar -cvpz /ruta/archivo | \ split -d -a 3 -b 4000m - /mnt/disco_fat32/archivo.tar.gz. |
Se irán generando trozos del archivo comprido identificados por un número de serie como sufijo (archivo.tar.gz.000; archivo.tar.gz.001; etc). La compresión es opcional –parámetro z del comando tar– pero puede ahorrar bastante espacio según el caso. En lugar de un archivo de entrada podemos indicar un directorio para empaquetar todo su contenido. Los parámetros de split usados indican:
- -d → que use números como sufijo en lugar de letras.
- -a 3 → que use 3 cifras. Apropiado para unos 1000 trozos (unos 4 TB tras comprimir).
- -b 4000m → que separe en trozos de 4000 MB.
- – → que se use como entrada la entrada estándar stdin.
Recuperación del archivo
Para volver a unir los trozos y obtener de nuevo el archivo o el directorio comprimido en el lugar que elijamos se usa lo siguiente:
cat /mnt/disco_fat32/archivo.tar.gz.* | (cd /ruta_elegida/; tar zxv) |
Los trozos son unidos y extraídos por tar en el directorio que hemos denominado ruta_elegida.
Tags: herramientas, Linux, Mac Os X, UNIX
Social