
Estoy ayudando a mi novia con un evento en el que tiene que cargar alrededor de 1000 unidades flash USB con el mismo archivo.
Es un archivo bastante pequeño (sólo unos pocos MB), pero la parte tediosa es copiar el archivo.
¿Existe alguna forma de copiar automáticamente un archivo a una unidad flash USB en el momento en que se inserta? Esto facilitaría mucho su trabajo.
Mi sistema operativo de escritorio es Windows 10, pero también tengo acceso a Linux. Ni siquiera me opondría a escribir un script bash para Linux, si eso fuera más fácil.
Respuesta1
En Ubuntu 16.04 hay una unidad flash USB montada /media/$USER/LabelName
, pero es posible manejar la copia del archivo sin saberlo. Un guión aproximado sería: -
#!/bin/bash
while sleep 1
do [ -e /media/$USER/*/TheFile ] || cp TheFile /media/$USER/*/
umount umount /media/$USER/*
xmessage -center -timeout 3 "File copied - change disc"
done
Esto es sólo para mostrar el principio. Una cosa que debe hacer es asegurarse de que no haya nada montado /media/$USER/
antes de comenzar (a menos que ya haya montado la primera unidad). Puede reemplazarlo TheFile
por un parámetro o una variable de entorno preestablecida, pero asegúrese de que esté en su directorio actual, de modo que no haya una ruta; de lo contrario, la verificación de su existencia en la unidad fallará.
Probablemente puedas hacer todo esto en un disco Ubuntu Live sin instalarlo, pero necesitarás verificar dónde están montados los pendrives y modificar el script si es necesario; Además, no estoy seguro de si xmessage
está incluido en un disco Live, por lo que es posible que deba instalarlo, a menos que utilice otro método para indicar que es necesario cambiar la unidad.
Respuesta2
una extensión deLa idea básica de AFH, suponiendo que su sistema operativo Linux monte unidades flash automáticamente en formato /media/$USER
.
#! /bin/bash
src="$1"
target="$(basename "$src")"
counter=0
copyTo() {
sleep 0.3 # wait for drive to be fully mounted
printf -v offset '%*s' $(( counter * 15 % ($(tput cols) - 15) ))
echo "$offset Copy to $counter"
cp "$src" "$1/$target"
sync "$1"
umount "$1"
echo "$offset Unmounted $counter"
}
inotifywait -me create --format "%w%f" "/media/$USER" |
while IFS='' read -r drive; do
((++counter))
copyTo "$drive" &
done
Uso
- Instálalo
inotifywait
si aún no lo has hecho. En Ubuntu, utilicesudo apt install inotify-tools
para hacerlo. - Configure su administrador de archivos (por ejemplo, nemo o nautilus) paranoabrir las unidades montadas automáticamente.
umount
puede fallar si una ventana del administrador de archivos muestra el contenido de la unidad que se va a desmontar. - Guarde el guión como
autocopy.sh
. - Haga que el script sea ejecutable usando
chmod u+x autocopy.sh
- Inicie el script usando
./autocopy.sh '/path/to/file.ext'
- Inserte tantas unidades flash USB como desee. El script detecta las unidades a medida que se conectan, les copia el archivo y las desmonta.
- Cuando termine, presione CtrlCpara salir del script.
Producción
El script se imprime antes de copiar los archivos y después de desmontar las unidades. Los mensajes relacionados tienen sangría al mismo nivel.
Copy to 1
Unmounted 1
Copy to 2
Copy to 3
Unmounted 3
Unmounted 2
Copy to 4
Unmounted 4
Es posible que las cifras no sean fiables. Si insertas el mismo palo dos veces, se cuenta dos veces.