Un trabajito que he tenido últimamente ha sido editar unos archivos de audio y subirlos a un hosting para luego ser publicados en un sitio web en modalidad de podcasts. Luego de editarlos (en Audacity) tengo que loguearme en la página del hosting, buscar el explorador de archivos y subir uno a uno los archivos de audio (que a veces son dos o tres) pero que van de 35 a 50 MB's.
Bueno, en fin, esto es aplicable a cualquier situación similar sin importar la cantidad o el tamaño de los archivos.
La finalidad de esto es ilustrar mediante un script la automatización de este proceso. Ya existen varias aplicaciones gráficas que hacen esta tarea como son FileZilla (multiplataforma) o SmartFTP (para Windows).
Manos a la obra...
Lo primero que haremos es comprobar que el proceso funciona de forma manual, es decir comando a comando en el terminal. El comando lftp (Sophisticated file transfer program) lo usaremos como el cliente FTP desde el cual nos conectaremos al servidor y haremos el trabajo.
Asumiremos que el folder local está ubicado en $HOME/audio, es decir /home/fraterneo/audio o ~/audio. Más adelante veremos por qué considero estas formas de referirme al folder local. Por otro lado el servidor FTP está en la dirección 192.168.24.101, en donde se tiene un usuario de nombre igual: fraterneo.
Conectándonos con el servidor con lftp:
fraterneo@rainbow:~$ lftp fraterneo@192.168.24.101
Password:
lftp fraterneo@192.168.24.101:/>
Para verificar que la conexión fue correcta entramos algún comando:
lftp fraterneo@192.168.24.101:/> ls
drwxrwxrwx 2 1582064 15000 4096 Apr 10 2011 audio
De no estar correctamente conectados, aparecerá un error como el siguiente:
lftp fraterneo@192.168.24.101:/> ls
ls: Login failed: 530 Login incorrect.
lftp fraterneo@192.168.24.101:/>
En el entendido de que todo salió bien, continuamos. Dentro del servidor FTP nos entramos al folder que va a ser sincronizado con nuestro folder local:
lftp fraterneo@192.168.24.101:/> cd audio/
lftp fraterneo@192.168.24.101:/audio>
Ahora desde el mismo servidor FTP con el comando lcd entramos al directorio local. Y finalmente iniciamos la sincronización con el comando mirror -Rn.
lftp fraterneo@192.168.24.101:/audio> lcd /home/fraterneo/audio
lcd ok, local cwd=/home/fraterneo/audio
lftp fraterneo@192.168.24.101:/audio> mirror -Rn
`audio01-octurbe.mp3' at 1488399 (33%) 89.7K/s eta:45s [Sending data]
Luego de finalizada la transferencia de todos los archivos se nos informa lo siguiente:
lftp fraterneo@192.168.24.101:/audio>
Total: 2 directories, 2 files, 0 symlinks
New: 2 files, 0 symlinks
7484394 bytes transferred in 86 seconds (85.0K/s)
Listo! El proceso funciona perfectamente de forma manual.
Nota: Para este ejemplo de sincronización no he utilizado la opción -e en el comando mirror, la cual nos permite borrar los archivos no existentes en el origen, debido a la opción -R que hace que sea un reverse mirror, y -n solo copia los archivos no existentes en el destino.
Finalmente ya podemos crear el script de bash. Tendremos entonces dos ficheros, uno será el script en sí mismo y el otro contendrá los comandos de lftp para ser ejecutados secuencialmente. Esto hace el script más portable para otros usuarios.
Fichero ftpmirrorsync.lftp
Fichero ftpmirrorsync.sh
Nota: Para este ejemplo de sincronización no he utilizado la opción -e en el comando mirror, la cual nos permite borrar los archivos no existentes en el origen, debido a la opción -R que hace que sea un reverse mirror, y -n solo copia los archivos no existentes en el destino.
Finalmente ya podemos crear el script de bash. Tendremos entonces dos ficheros, uno será el script en sí mismo y el otro contendrá los comandos de lftp para ser ejecutados secuencialmente. Esto hace el script más portable para otros usuarios.
Fichero ftpmirrorsync.lftp
fraterneo@rainbow:~$ nano ftpmirrorsync.lftp
open -ufraterneo,AdminFtP9138 192.168.24.101
cd audio
lcd ~/audio
mirror -Rn
open -ufraterneo,AdminFtP9138 192.168.24.101
cd audio
lcd ~/audio
mirror -Rn
Como podemos observar he utilizado la tilde de expansión (~) para referirme al directorio home del usuario actual (/home/fraterneo).
fraterneo@rainbow:~$ nano ftpmirrorsync.sh
#!/bin/bash
LFTPSCRIPT="~/ftpmirrorsync.lftp"
lftp -f $LFTPSCRIPT
Ahora vemos la utilidad de la tilde de expansión en la definición de la variable LFTPSCRIPT. Con la opción -f de lftp le indicamos que use el fichero cuyo camino se guarda en la variable.
Le otorgamos permisos de ejecución al script:
Ahora podemos agregar un job en /etc/crontab para ejecutar dicho script según nos convenga. También podemos copiarlo al folder /etc/cron.daily, /etc/cron.weekly, etc, etc, según querramos. Otra opción idónea sería instalar gnome-schedule, que maneja los jobs tipo crontab.
#!/bin/bash
LFTPSCRIPT="~/ftpmirrorsync.lftp"
lftp -f $LFTPSCRIPT
Ahora vemos la utilidad de la tilde de expansión en la definición de la variable LFTPSCRIPT. Con la opción -f de lftp le indicamos que use el fichero cuyo camino se guarda en la variable.
Le otorgamos permisos de ejecución al script:
fraterneo@rainbow:~$ sudo chmod u+x ftpmirrorsync.sh
Amigo me da un error, la sintaxis del .lftp es asi:
ResponderEliminaropen -usuario,password servidorftp