Script bash para sincronizar discos USB

Improvisa :: Informática :: Script bash para sincronicar discos USBSiguiendo 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:

#!/bin/bash

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

Comentarios

    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
  • Juanmi dice:

    Mil gracias Alfonso, un placer leer tus scripts, se aprende un huevo 😉