Uso

Uso

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 TheFilepor 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 xmessageestá 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 inotifywaitsi aún no lo has hecho. En Ubuntu, utilice sudo apt install inotify-toolspara hacerlo.
  • Configure su administrador de archivos (por ejemplo, nemo o nautilus) paranoabrir las unidades montadas automáticamente. umountpuede 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 usandochmod 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.

información relacionada