Скрипт Bash не копирует файлы с помощью udev

Скрипт Bash не копирует файлы с помощью udev

У меня есть скрипт, настроенный на запуск при вставке определенного usb-накопителя. Он должен копировать папку с usb-накопителя в резервную папку и перезаписывать эту папку, если она уже существует. Однако, когда я вставляю свой usb-накопитель, он создает папку, но не копирует никаких файлов.

Мой .rules выглядит так:

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

Мой файл mkBackup выглядит так:

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

Когда он запускается udev, создается папка Backup, но она пуста, но когда я просто запускаю ./mkBackup, папка создается и все копируется. Это мой первый опыт использования udevдля чего-то подобного, поэтому, пожалуйста, простите меня, если это покажется простым вопросом. Заранее спасибо.

решение1

Учитывая, что папка Backup создана, вы знаете, что скрипт успешно выполняется при подключении устройства. Я подозреваю, что скрипт выполняетсядоустройство фактически завершает монтирование. Таким образом, файлы пока недоступны для cp.

Что произойдет, если вы добавите sleep 5после mkdir $a? Или что, если вы попытаетесь скопировать существующие файлы?

Эта ссылкатакже весьма полезно в качестве справочного материала.

Я также использую:

udevadm monitor --udev

Для просмотра событий udev в реальном времени.

udevadm test /path/to/dev

Для имитации события udev, запущенного для устройства. Обратите внимание, что это ненетзапустить любую программу, указанную клавишей RUN.

РЕДАКТИРОВАТЬ:Как любезно замечает Жиль, моя идея не сработает. И я не знаю решения. Вот почему:

Udev сделает USB-устройство доступным для ОС. Затем ОС поймет, что ОС содержит монтируемую файловую систему, и смонтирует ее. В этот момент файлы на USB-устройстве фактически доступны.

Любой скрипт, запущенный правилом udev, будет выполнендофайловая система фактически смонтирована. Если я придумаю альтернативу, я обновлю пост.

Связанный контент