El script Bash no copia archivos usando udev

El script Bash no copia archivos usando udev

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 udevalgo 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 5despué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.

información relacionada