viernes, 24 de diciembre de 2010

Cortar y unir archivos en Linux con split y cat

Hace poco me he encontrado con un problema ya que necesitaba enviar un vídeo a un amigo que vive a cientos de kilómetros de mi domicilio y la unica forma que tengo de hacerselo llegar es por email. El video es más grande de lo que le permite recibir su proveedor de correo electrónico, por lo que me es imposible enviárselo. Como la persona a la que se lo quiero enviar también usa Linux voy a dividirlo en varias partes para enviárselas en diferentes emails y que una vez recibidos el pueda unirlos. El limite de envio son 10 Mb y el archivo tiene aproximadamente 13. Lo voy a cortar en dos trozos, el mayor de 7 Mb y el otro del resto que son unos 6 Mb. Así le puedo enviar dos emails con un trozo en cada email y mi amigo cuando los reciba unirlos en su Linux.
En Debian y en todos los Linux que he probado para partir en trozos un archivo se utiliza el comando "split", y "cat" para volver a unirlo posteriormente. En Debian no es necesario instalar nada ya que se instalan con el sistema.


PARA DIVIDIRLO

Primero tenemos que saber cuantos bytes son 7 megabytes ya que a "split" hay que indicarle el tamaño maximo de las partes del archivo en bytes. Como 1024 bytes son 1 kilobyte, 1024 kilobytes son 1 megabyte y queremos saber cuantos bytes son 7 megabytes, multiplicamos 1024x1024x7 que son 7340032 bytes.
El archivo que le quiero enviar es un video llamado "para_aprender.avi" y que los trozos de archivo tengan como nombre base "para_aprender.". Digo como nombre base porque slit al dividir añade unas letras a cada trozo para que no tengan el mismo nombre.

1. En una consola de usuario vamos al directorio que contenga el archivo a dividir. Yo lo tengo en un directorio llamado video en el directorio personal de mi usuario :
        $ cd $HOME/video
           o
        $ cd /home/exbian/video

2. Comprobamos que el archivo que queremos dividir se encuentra en el directorio actual :
        $ ls
        para_aprender.avi

3. Dividimos el archivo e indicamos a split que el nombre base de las partes sea "para_aprender." :
        $ split -b 7340032 para_aprender.avi para_aprender.

4. Comprobamos que se ha dividido :
        $ ls
        para_aprender.avi
        para_aprender.aa
        para_aprender.ab

    Podemos ver las dos partes "para_aprender.aa" y "para_aprender.ab".

5. Comprobamos que el tamaño de las dos partes divididas se aproxima a lo que habiamos calculado. Voy a usar el comando "du" :
        $ du -h para_aprender.aa para_aprender.ab
        7,1M    para_aprender.aa
        6,2M    para_aprender.ab

6. Enviamos "para_aprender.aa" en un email y "para_aprender.ab" en otro.


PARA UNIRLO

Cuando mi amigo lo reciba guardará los dos adjuntos ("para_aprender.aa" y "para_aprender.ab") en un directorio.

1. En una consola de usuario va al directorio donde los ha guardado :
        $ cd /directorio/donde/ha/guardado

2. Comprueba que teniene los archivos a unir :
        $ ls
        para_aprender.aa
        para_aprender.ab

3. Unimos los archivos y como resultado creamos el archivo original.
        $ cat para_aprender.* > para_aprender.avi

Ahora mi amigo puede ver el video "para_aprender.avi" con el reprodcutor de video de su Linux.


Aparte de para poder enviar archivos grandes divididos por email, también puede servir para dividir cualquier archivo que necesites dividir por problemas de espacio en los medios de los que dispongas para transportar datos y unirlo una vez llevado a su destino. Supongo que funciona con cualquier formato de archivo. Yo he probado con imagenes iso, archivos de audio y video, archivos comprimidos, imagenes, archivos pdf...   ...y nunca me ha fallado.


1 comentario:

Raúl Antonio Ortega dijo...

Muy buen árticulo. Lo curioso es que al juntar un video, en mi caso archivos ".VOB", el player no tiene idea del apuntador del tiempo, es decir no logra identificar la duración del video ya unificado. saludos