A veces puede ser necesario fraccionar un archivo para su transmisión por correo en partes, o para colocarlo en un FTP o sitio web para su descarga por partes. Una forma de hacerlo es mediante compresores que permiten volúmenes múltiples, pero con el comando split
también podemos separar/cortar archivos en fragmentos, para luego unirlos con cat
.
Los comandos split
y cat suelen venir en todas las distribuciones de GNU/Linux, y no son difíciles de utilizar. Por ejemplo, con el siguiente comando fraccionaremos el archivo prueba.dat
y obtendremos archivos de 1 MiB llamados cortadoaa, cortadoab, cortadoac, etc.
$ split -b 1M prueba.dat cortado
Con el comando cat
podemos unir todas las partes del archivo para asi restaurarlo (ojo, que todos deben de encontrarse en el mismo directorio).
$ cat cortado* > prueba.dat
Puede darse el caso de que un archivo sea grande y necesitemos fraccionarlo en muchos fragmentos pequeños (por ejemplo de 1 MiB). Para tales casos, es mejor utilizar un sufijo numérico:
$ split -b 1M -d -a 3 archivo.dat archivo.dat.
Asi obtendremos fragmentos de 1 MiB llamados archivo.dat.000, archivo.dat.001, etc.
-b
Indica el tamaño en que se desean obtener los archivos, puede especificarse en KiB (-b 200K
), en MiB (-b 1M
), en GiB (-b 1G
), etc. Por ejemplo, dado que a veces los buzones de correo tienen un límite de 1 MiB y que al adjuntar un archivo binario (cualquier programa o documento que no esté en formato de texto simple) este suele crecer aproximadamente 1/3 (como efecto de la codificación de binario a texto), si deseamos enviar un archivo de 2 MiB por correo, podríamos utilizar split con el parámetro -b 720K
y entonces enviar los fragmentos como adjuntos, uno por mensaje.
-d
Indica que se desea utilizar sufijos numéricos en lugar de alfabéticos.
-a
Permite especificar cuantos dígitos deseamos (por defecto son 2).
Si por algún motivo deseamos cerciorarmos que al concatenar las partes se hará en el orden correcto, podríamos hacer algo como esto:
$ cat `find /ruta/origen -type f -iname "archivo.dat.*" | sort` > /ruta/destino/archivo.dat
En el caso de un archivo de texto, también podríamos especificar cada cuántas líneas split
debe cortar el archivo, mediante el parámetro -l número
Para más información, consultar el manual:
$ man split $ man cat