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,會創建備份資料夾,但它是空的,但是當我運行時./mkBackup,會創建該資料夾並複製所有內容。這是我第一次做udev這樣的事情,所以如果這看起來是一個簡單的問題,請原諒我。先感謝您。

答案1

鑑於已建立備份資料夾,您知道當您插入裝置時腳本會成功執行。我懷疑腳本正在執行設備實際完成安裝。因此,這些文件尚不可用於cp.

sleep 5如果在之後添加會發生什麼mkdir $a?或者如果您嘗試複製現有文件怎麼辦?

這個連結作為參考也很有幫助。

我也用:

udevadm monitor --udev

即時觀看 udev 事件。

udevadm test /path/to/dev

模擬為裝置運行的 udev 事件。請注意,這確實不是執行由 RUN 鍵指定的任何程式。

編輯:正如吉爾斯有益地指出的那樣,我的想法行不通。而且我不知道解決方案。原因如下:

Udev 將使 USB 裝置可供作業系統使用。然後,作業系統將意識到作業系統包含可安裝的檔案系統並安裝它。此時 USB 裝置上的檔案實際上可用。

任何由 udev 規則運行的腳本都會執行檔案系統實際上已掛載。如果我想到替代方案,我會更新帖子。

相關內容