Script bash para sincronizar discos USB
Siguiendo la noticia del otro día, hoy envío otro script para sincronizar (hacer copia de seguridad) utilizando rsync y mirando el número de serie del dispositivo USB para no equivocarnos.
En concreto el ejemplo que envío sincroniza un disco USB que contiene la música y la paso al PC donde la escucho, es decir, en este caso la original es la del disco USB y el destino de la copia (sincronización) es el PC pero basta cambiar origen/destino. También se puede cambiar fácilmente para sincronizar 2 discos externos USB, por ejemplo, donde tengo las películas que están en un disco SATA que conecto a un dock USB y cuando estimo oportuno conecto otro disco igual y los sincronizo (hago copia de seguridad); no lo envío porque complica más y se pierde el concepto. Además de sincronizar USB-PC, lo sincroniza también con otro host remoto.
Pues sin más que añadir, sigue leyendo para ver el script:
numero_de_serie_dispositivo="XXX" # Introducir aquí el número de serie
del disco USB (se visualiza con "sudo udevadm info –query=all
–name=/dev/DISPOSITIVO | grep SERIAL")
function sincroniza_SITIO_EXTERNO
{
echo -e "
Sincronizando música a SITIO_EXTERNO:
"
rsync -av –delete-after –stats /mnt/datos_ext3/Música/ USUARIO@SITIO_EXTERNO:/copias/Música/
sleep 5
exit
}
trap sincroniza_SITIO_EXTERNO SIGINT
until [ "$dispositivo" != "" ] && [ "$punto_de_montaje" != "" ]
do
echo "Esperando que se conecte el dispositivo…"
sleep 2
for que_posible_dispositivo in `cat /proc/diskstats | grep "sd. " | awk ‘{ print ($3) }’`;
do
if [ "`sudo udevadm info –query=all
–name=$que_posible_dispositivo | grep ID_SERIAL= | cut -d= -f 2`" ==
"${numero_de_serie_dispositivo}" ]
then
dispositivo=/dev/${que_posible_dispositivo}1
punto_de_montaje=`mount | grep $dispositivo | cut -d" " -f 3`
while [ "$punto_de_montaje" == "" ]
do
echo "Esperando que se monte el dispositivo…"
sleep 2
punto_de_montaje=`mount | grep $dispositivo | cut -d" " -f 3`
done
while [ `mount | grep $dispositivo | wc -l` -gt 1 ]
do
echo "El dispositivo está montado más de una vez, esperando que sólo haya una…"
sleep 2
punto_de_montaje=`mount | grep $dispositivo | cut -d" " -f 3`
done
fi
done
done
echo -e "
Sincronizando música de disco USB a PC de $dispositivo en $punto_de_montaje:
"
ls -la ${punto_de_montaje}/
sleep 5
nice rsync -av –delete-after –stats ${punto_de_montaje}/Música/ /mnt/datos_ext3/Música/
sleep 2
echo -e "
Desmontando el dispositivo.
"
sudo umount $punto_de_montaje
sleep 2
sincroniza_SITIO_EXTERNO
Warning: Use of undefined constant type - assumed 'type' (this will throw an Error in a future version of PHP) in /home/improvisa_com/web/improvisa.com/public_html/wp-content/themes/grassland/comments.php on line 38
Mil gracias Alfonso, un placer leer tus scripts, se aprende un huevo 😉