我设置了一个脚本,在插入某个 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 规则运行的脚本都会执行前文件系统实际上已挂载。如果我想到替代方案,我会更新帖子。