Normalmente, cuando estoy desarrollando aplicaciones para Facebook, primero, las hago Offline, ejecutándolas en mi servidor local y, una vez que funcionan, las subo al servidor desde las que se ejecutarán, aunque muchas veces hay ciertos problemas una vez se está ejecutando la aplicación de forma definitiva, que requieren hacer algunas modificaciones más, y con esto, subir varias veces los archivos de los scripts.
Por otra parte, a veces, en ciertas aplicaciones web, es necesario introducir cierta información nueva (que hago fuera de línea) y cuando todas las novedades han sido introducidas procedo a subirlo todo junto.
También es importante, sobre todo para proyectos más o menos grandes, que sólo se suban al servidor los archivos nuevos o modificados antes de la última actualización, es muy importante, ya que la ejecución puede eternizarse si tenemos que subir 10Mb de datos cada vez que queremos actualizar, por lo tanto, almacenamos en un archivo el momento en que se ejecutó el script por última vez, y cada vez que buscamos archivos, lo hacemos con los que han sido actualizados a partir del momento que almacenamos en el fichero anterior.
Para eso creé este script (aún queda mucho trabajo por hacer), pero por ahora hace bastante bien el apaño. Yo llamo a este archivo (autoftp):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
| #!/bin/bash
servidor=$1
ruta_serv=$2
ruta_local=$3
endline="
"
dir_actual=`pwd`
cd $3
if [ -e $ruta_local"/last_update" ]; then
f_locales=`find . -newer $ruta_local/last_update`
else
f_locales=`find .`
fi
function cierratodo()
{
kill $ftp_pid
kdialog --msgbox $1
}
function estadoman()
{
while read estado
do
estadonum=`echo $estado | cut -d' ' -f1`
echo $estado
if [[ $estado != "Not connected" ]]; then
if [[ $estadonum == "226" ]]; then
subidos=$(($subidos+1))
kdialog --passivepopup "Subido archivo "$subidos" de "$total_archivos 2
elif [[ $estadonum == "221" ]]; then
cierratodo "Los archivos se subieron con éxito"
date +%s > $ruta_local"/last_update"
# Fin del programa
fi
else
echo "Cerrandooo"
cierratodo "La conexión se cerró inesperadamente"
fi
done
}
to_do="pass"$endline"cd $ruta_serv"$endline;
last_dir="";
total_archivos=0
for i in $f_locales
do
arch_relat=${i:2}
if [ ! -z $arch_relat ]; then
nombre_dir=`dirname $arch_relat`
if [[ $nombre_dir == "." ]]; then
nombre_dir=""
fi
if [ -d $arch_relat ]; then
to_do=$to_do"cd $ruta_serv/$nombre_dir"$endline
to_do=$to_do"mkdir $ruta_serv/$arch_relat"$endline
else
# echo "*"$nombre_dir"="$last_dir"*";
if [[ $last_dir != $nombre_dir ]]; then
last_dir=$nombre_dir
to_do=$to_do"cd $ruta_serv/$nombre_dir"$endline
fi
to_do=$to_do"put $ruta_local/$arch_relat "`basename $arch_relat`$endline
total_archivos=$(($total_archivos+1))
# to_do=$to_do"put $3/$arch_relat\n"
echo "FICHERO --- $arch_relat";
fi
fi
done
OLDIFS=$IFS
IFS="
"
to_do=$to_do"quit"$endline
if [[ $total_archivos > 0 ]]; then
for j in $to_do ; do echo $j;done;
rm /tmp/ftp_pipe > /dev/null 2>&1
mkfifo /tmp/ftp_pipe > /dev/null 2>&1
ftp -v totaki.com > /tmp/ftp_pipe <<EOF &
`for j in $to_do ; do echo $j;done;`
EOF
ftp_pid=$!
else
kdialog --msgbox "No hay archivos para subir"
fi
cd $dir_actual
IFS=$OLDIFS
rm /tmp/ftp_pipe > /dev/null 2>&1 |
Para su uso, son necesarios tres parámetros:
- Dirección del servidor
- Ruta donde se colocan los archivos en el directorio remoto
- Ruta de donde se buscarán los archivos en el directorio local
Requerimientos:
- kdialog (Se puede modificar el script para utilizar otro fácilmente)
- ftp (Este programa se encargará de subir los archivos)
Para configurar el script es necesario editar el archivo .netrc localizado en nuestro home y donde irá el nombre de usuario y contraseña del FTP (este fichero es leído por ftp automáticamente y así no necesitamos incluir passwords ni en la línea de comando ni en el propio script, que quedan muy feos). El fichero .netrc tiene la siguiente estructura:
machine [servidor] login [usuario] password [contraseña]
Por ejemplo podemos hacer un .netrc que contenga:
machine www.servidor.com login pepito password josefina
Una vez completado esto, podemos asociar una tecla al script, y con ello simplemente pulsando esa tecla se subirán los archivos al servidor.
Por último, yo lo tengo configurado en Fluxbox con Mod4+F5 o lo que es lo mismo la tecla de Windows y F5; basta con crear un script lanzador que incluya lo siguiente (yo lo llamo ftp_upload):
1 2 3 4
| #!/bin/bash
# Modelo
#/home/gaspy/.scripts/autoftp [servidor] [ruta interna] [ruta_local]
#/home/gaspy/.scripts/autoftp ftp.servidor.com http_docs/pruebas /home/yomismo/proyectos/pruebas |
añadir al fichero keys dentro de /home/[usuario]/.fluxbox/ la siguiente línea:
Mod4 F5 :execcommand ~/.scripts/ftp_upload
Últimos comentarios