我設定了一個腳本,在插入某個 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 規則運行的腳本都會執行前檔案系統實際上已掛載。如果我想到替代方案,我會更新帖子。