Script Bash não copia arquivos usando udev

Script Bash não copia arquivos usando udev

Eu tenho um script configurado para ser executado quando uma determinada unidade USB for inserida. É suposto copiar uma pasta da unidade USB para uma pasta de backup e escrever sobre esta pasta, se ela já existir. No entanto, quando conecto meu drive USB, ele cria a pasta, mas não copia nenhum arquivo.

Meu .rules é assim:

ACTION=="add", ATTR{idVendor}==Vendor, ATTR{idProduct}==Product, RUN+="/bin/sh /path/to/file/mkBackup"

Meu arquivo mkBackup fica assim:

#!/bin/bash
a="/path/to/file/Backup"
if [ -e $a ]; then
        rm -rf $a
fi
mkdir $a
cp -r /path/to/usb/folder $a

Quando ele é executado udev, a pasta Backup é criada, mas fica vazia, mas quando eu apenas executo ./mkBackup, a pasta é criada e tudo é copiado. Esta é a primeira vez que udevfaço algo assim, então, por favor, me perdoe se isso parece uma pergunta simples. Agradeço antecipadamente.

Responder1

Dado que a pasta Backup foi criada, você sabe que o script é executado com sucesso quando você conecta o dispositivo. Suspeito que o script esteja sendo executadoanteso dispositivo realmente termina a montagem. Portanto, os arquivos ainda não estão disponíveis para cp.

O que acontece se você adicionar sleep 5depois mkdir $a? Ou e se você tentar copiar os arquivos existentes?

Esse linktambém é muito útil como referência.

Eu também uso:

udevadm monitor --udev

Para assistir aos eventos do udev em tempo real.

udevadm test /path/to/dev

Para simular um evento udev executado para o dispositivo. Observe que isso faznãoexecute qualquer programa especificado por uma chave RUN.

EDITAR:Como Gilles ressalta, minha ideia não funcionará. E não tenho conhecimento de uma solução. Aqui está o porquê:

O Udev disponibilizará o dispositivo USB para o sistema operacional. Então, o sistema operacional perceberá que contém um sistema de arquivos montável e o montará. Nesse ponto, os arquivos do dispositivo USB estão realmente disponíveis.

Qualquer script executado por uma regra do udev será executadoanteso sistema de arquivos está realmente montado. Se eu pensar em uma alternativa atualizarei o post.

informação relacionada