Ayuda con script en Ubuntu

Hola buenas,

Necesito un script para ubuntu que haga lo siguiente: Coja dos archivos determinados (con una ruta específica) y los copie a todas las unidades USB conectadas al equipo y que luego automáticamente desmonte las unidades para poder retirarlas.

El objetivo es copiar esos dos archivos a muchos pendrives, secuencialmente, es decir, con un hub de 6 irlos poniendo, copiarlos a todos del tirón y luego desconectarlos automaticamente sin ir teniendo que cerrarlos uno a uno.

Muchas gracias
Ubuntu monta automáticamente los dispositivos usb? (mm... una cosa es que lo detecte y al abrirlo con nautilus te lo monte, y otra cosa es que nada mas conectar el usb te lo monte automáticamente)

Sino los monta automáticamente lo primero será saber que usb hay que montar.

Haciendo un ls /deb/sd* te saldran todos discos que ha detectado el kernel, ten cuidado que seguramente tambien tendras ahí el disco duro del sistema operativo.

Otra forma de ver los dispositivos es haciendo un cat /proc/diskstats, para parsear mas la salida...

cat /proc/diskstats | grep "sd.[^ ]" | awk '{ print ($3) }'


Una vez obtenida la lista de dispositivos pasas a montarlos con mount

Realizas la copia de los ficheros con cp...

Y procedes a desmontarlos con umount
Como bien dice nu_kru, lo primero es saber donde estan los pendrives, como ha puesto el con un ls /dev/sd* vale.

Luego seria con un script para automatizarlo todo (tambien te lo he puesto en el post de pruebas)

El script teniendo en cuenta de que tus pendrives empiezan en /dev/sdb y terminan en /dev/sdj (lo de la j es al azar xD)

for i in /dev/sd[b-j]1
do
mount $i /mnt/pendrive
cp /ruta/de/los/archivos/archivo1 /mnt/pendrive/
cp /ruta/de/los/archivos/archivo2 /mnt/pendrive/
umount $i
done


Lo que no me acuerdo es si el umount se puede hacer directamente sobre el dispositivo /dev/sdX o hay que hacerlo sobre el punto de montaje... (¿o se podian de los 2?). En el script lo desmonta desde dispositivo.
mik0 escribió:
Lo que no me acuerdo es si el umount se puede hacer directamente sobre el dispositivo /dev/sdX o hay que hacerlo sobre el punto de montaje... (¿o se podian de los 2?). En el script lo desmonta desde dispositivo.


umount lo puedes hacer tanto sobre el dispositivo como sobre el punto de montaje, jeje
nu_kru escribió:
mik0 escribió:
Lo que no me acuerdo es si el umount se puede hacer directamente sobre el dispositivo /dev/sdX o hay que hacerlo sobre el punto de montaje... (¿o se podian de los 2?). En el script lo desmonta desde dispositivo.


umount lo puedes hacer tanto sobre el dispositivo como sobre el punto de montaje, jeje



Pues mira... no estoy tan viejo como me pensaba [fies]
Hola buenas,

Mirad el que he hecho yo (también para aprender de mis errores un poco), al final parece que identifica el pendrive automaticamente (aunque esto no es definitivo, porque es uno de prueba, que los finales no serán así)

#! /bin/bash
cp /home/ubuntu/Desktop/prueba_2.txt   /media/460F-D9ED_
cp /home/ubuntu/Desktop/archivo_pesado.pdf   /media/460F-D9ED_
sudo umount  -f /media/460F-D9ED_
echo #done
echo "Terminado"


Haciendo esto no me termina de copiar el archivo pesado al pendrive (unos 8 megas) y tampoco lo desmonta. Sin embargo si lo sustituyo por un archivo ligero (un documento de texto) si me los copia y desmonta.

He intentado usar el comando "sleep" para que haga una pausa de 2 segundos entre el archivo pesado y el desmontar, así si lo copia, pero no lo desmonta.

Voy a ver si el que habéis puesto me funciona.

Muchas gracias!
Prueba a hacer un sync antes del umount, por si es que aun quedan e/s por hacer que las termine y cuando las termine, lo desmonte.


cp /home/ubuntu/Desktop/archivo_pesado.pdf   /media/460F-D9ED_
sync
sudo umount  -f /media/460F-D9ED_
echo #done
Con el comando sync no he conseguido solucionarlo, sin embargo, en un pendrive que he probado en vez de umount he utilizado eject y lo ha hecho bien (tanto la copia como el expulsado). Ahora me falta probarlo en masa a ver si funciona asi
Posibles usos para esto...
Pendrives para eventos pasando fotos de este, documentación o publicidad.
O sino... meter archivos maliciosos XD.

Parece que ya no tenéis problemas pero yo recomendaría añadir al cp una barra de progreso (no recuerdo ahora que comando era ahora pero seria muy util) y así si se queda pillado uno o da fallo poder ver bien en cual dio fallo y cuanto queda ^^.
Por ultimo si el pc tiene potencia y son datos pesadetes también podría hacerse copiado paralelo en vez de secuencial.
Por ultimo, mejor un hub 2.0/3.0 autoalimentado porque sino la velocidad puede verse gravemente mermada.
blackgem escribió:Posibles usos para esto...
Pendrives para eventos pasando fotos de este, documentación o publicidad.
O sino... meter archivos maliciosos XD.

Parece que ya no tenéis problemas pero yo recomendaría añadir al cp una barra de progreso (no recuerdo ahora que comando era ahora pero seria muy util) y así si se queda pillado uno o da fallo poder ver bien en cual dio fallo y cuanto queda ^^.
Por ultimo si el pc tiene potencia y son datos pesadetes también podría hacerse copiado paralelo en vez de secuencial.
Por ultimo, mejor un hub 2.0/3.0 autoalimentado porque sino la velocidad puede verse gravemente mermada.


Mi PC es un cora i5-2430M a 2,4Ghz y 4 gb de RAM, como se podría hacer el copiado paralelo? El hub es 2.0 con alimentación externa
Mírate 'man bash' y lo que significa '&'. Puedes lanzar funciones en paralelo sin problema.

Otra opción es que uses xargs de algún modo creativo que también soporta paralelización simple.
shadow22 escribió:Hola buenas,

Necesito un script para ubuntu que haga lo siguiente: Coja dos archivos determinados (con una ruta específica) y los copie a todas las unidades USB conectadas al equipo y que luego automáticamente desmonte las unidades para poder retirarlas.

El objetivo es copiar esos dos archivos a muchos pendrives, secuencialmente, es decir, con un hub de 6 irlos poniendo, copiarlos a todos del tirón y luego desconectarlos automaticamente sin ir teniendo que cerrarlos uno a uno.

Muchas gracias


Parto de la base de que pinchas los chismes y se montan solos:

#!/bin/bash

#Obtenenmos la lista de dispositivos montados y los almacenamos en una variable, excluyendo cdroms y dvds
BACKUPDIR=`/bin/ls /media/ | grep -v [cd,dv]`
#Almacenamos en variables los ficheros a copiar
FILE1="/ruta/a/tu/fichero/1"
FILE2="/ruta/a/tu/fichero/2"

#Ahora, al asunto

for i in $BACKUPDIR

do
   /bin/cp $FILE1 $FILE2 /media/$i/ &
done

#Le damos tiempo

/bin/sleep 10

#Sincronizamos discos

/bin/sync

#Desmontamos

for i in $BACKUPDIR

do
   sudo /bin/umount /media/$i
done

#Nos vamos

exit 0



Si no te monta los chismes solos, una forma de obtener a que dispositivo están asociados es

sudo blkid | grep vfat | cut -d : -f1


suponiendo que estén formateados en vfat. Entonces se trataría de almacenar la salida de ese comando en una variable y hacer un bucle for i in $variable do mount $i done para montarlos.

Si no tienes el comando blkid, en fedora pertenece al paquete util-linux-ng. En ubuntu tendrá un nombre parecido.

blackgem escribió:Parece que ya no tenéis problemas pero yo recomendaría añadir al cp una barra de progreso (no recuerdo ahora que comando era ahora pero seria muy util)


Joer ... esto no lo había visto. Con la pichorrada esa [carcajad] [carcajad] [carcajad] [carcajad]

#!/bin/bash
#Obtenenmos la lista de dispositivos montados y los almacenamos en una variable, excluyendo cdroms y dvds

BACKUPDIR=`/bin/ls /media/ | grep -v [cd,dv]`
#Almacenamos en variables los nombres y rutas de los ficheros
FILE1="/ruta/completa/a/tu/fichero/1"
FILE2="/ruta/completa/a/tu/fichero/2"
DESTFILE1="solonombrefichero1"
DESTFILE2="solonombrefichero2"

for i in $BACKUPDIR

do
   /bin/cat $FILE1 | /usr/bin/pv -s 1m -p -e -r > /media/$i/$DESTFILE1
   /bin/cat $FILE2 | /usr/bin/pv -s 1m -p -e -r > /media/$i/$DESTFILE2
   #NO pongas cat $FILE1 $FILE2 como con cp porque eso te empalmará los ficheros y te los joderá   
done

/bin/sleep 10

/bin/sync

for i in $BACKUPDIR

do
   sudo /bin/umount /media/$i
done

exit 0


Para esto instala pv
Hoy mismo creo que empezaré a probarlos en masa, a ver como funcionan y tal y os iré comentando

Muchísimas gracias!
12 respuestas