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

バックアップフォルダが作成されていることを考えると、デバイスを接続するとスクリプトが正常に実行されることがわかります。スクリプトが実行されていると思われます。前にデバイスのマウントが実際に完了します。したがって、ファイルはまだ使用できませんcp

sleep 5の後に追加するとどうなりますかmkdir $a? または、代わりに既存のファイルをコピーしようとするとどうなりますか?

このリンク参考資料としてもかなり役立ちます。

私も使います:

udevadm monitor --udev

udev イベントをリアルタイムで監視します。

udevadm test /path/to/dev

デバイスのudevイベント実行をシミュレートします。これはないRUN キーで指定されたプログラムを実行します。

編集:Gilles が親切に指摘してくれたように、私のアイデアはうまくいきません。そして、解決策もわかりません。その理由は次のとおりです。

Udev は USB デバイスを OS で使用できるようにします。その後、OS はマウント可能なファイル システムが含まれていることを認識し、それをマウントします。その時点で、USB デバイス上のファイルは実際に使用できるようになります。

udevルールによって実行されるスクリプトは、前にファイルシステムは実際にマウントされています。代替案が思いついたら、投稿を更新します。

関連情報