Tengo un script configurado para ejecutarse cuando se inserta una determinada unidad USB. Se supone que debe copiar una carpeta de la unidad USB a una carpeta de respaldo y escribir sobre esta carpeta si ya existe. Sin embargo, cuando conecto mi unidad USB, crea la carpeta pero no copia ningún archivo.
Mis reglas se ven así:
ACTION=="add", ATTR{idVendor}==Vendor, ATTR{idProduct}==Product, RUN+="/bin/sh /path/to/file/mkBackup"
Mi archivo mkBackup se ve así:
#!/bin/bash
a="/path/to/file/Backup"
if [ -e $a ]; then
rm -rf $a
fi
mkdir $a
cp -r /path/to/usb/folder $a
Cuando lo ejecuta udev
, se crea la carpeta Copia de seguridad pero está vacía, pero cuando acabo de ejecutar ./mkBackup
, se crea la carpeta y se copia todo. Esta es la primera vez que uso udev
algo como esto, así que perdónenme si parece una pregunta simple. Gracias de antemano.
Respuesta1
Dado que se crea la carpeta Copia de seguridad, sabrá que el script se ejecuta correctamente cuando conecta el dispositivo. Sospecho que el script se está ejecutando.antesel dispositivo realmente termina de montarse. Por lo tanto, los archivos aún no están disponibles para cp
.
¿Qué pasa si agregas sleep 5
después mkdir $a
? ¿O qué pasa si intentas copiar archivos existentes?
Este enlaceTambién es bastante útil como referencia.
Yo también uso:
udevadm monitor --udev
Para ver eventos de udev en tiempo real.
udevadm test /path/to/dev
Para simular una ejecución de evento udev para el dispositivo. Tenga en cuenta que esto nonoejecutar cualquier programa especificado por una tecla RUN.
EDITAR:Como señala amablemente Gilles, mi idea no funcionará. Y no conozco una solución. Este es el por qué:
Udev pondrá el dispositivo USB a disposición del sistema operativo. Luego, el sistema operativo se dará cuenta de que contiene un sistema de archivos montable y lo montará. En ese momento, los archivos del dispositivo USB están realmente disponibles.
Cualquier script ejecutado por una regla udev se ejecutaráantesel sistema de archivos está realmente montado. Si pienso en una alternativa actualizaré la publicación.