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

相关内容