如果文件存在且符合 udev 规则,则从 USB 存储设备复制文件

如果文件存在且符合 udev 规则,则从 USB 存储设备复制文件

我有一个简单的 udev 规则来匹配 USB 存储设备,该规则运行一个简单的脚本来查找 USB 中的文件。我使用该usbmount包来自动安装 USB。正如文档所述,USB 设备将安装到/media/usb{0..7}

当检测到 USB 存储设备时,我运行此脚本

#!/bin/bash

options=("usb0" "usb1" "usb2" "usb3" "usb4" "usb5" "usb6" "usb7")

for dir in "${options[@]}"
do
    lookup="/media/$dir/luah_v2_version.zip"

    if [ -e "$lookup" ]; then
        cp $lookup /home/luah
        exit 0
    else
        echo "could not find $lookup" >> /home/luah/log
    fi
done

问题是,当 USB 连接后自动运行脚本时,它会导致一个日志文件,其中显示无法在上述任何目录中找到该文件(尽管它确实存在)。当我手动运行脚本时,它会运行并将 zip 文件复制到我想要的位置。

我尝试在脚本执行前设置 10 秒的等待时间,以查看脚本运行时 USB 是否尚未安装,但我得到的最终结果相同。

答案1

可能在处理规则时 usb 尚未挂载。尝试向 usbmount 添加一个钩子,即创建一个名为/etc/usbmount/mount.d/10_autocopy.sh

#!/bin/sh
[ -f $UM_MOUNTPOINT/luah_v2_version.zip ] &&  cp $UM_MOUNTPOINT/luah_v2_version.zip /home/luah

然后使其可执行:

chmod +x /etc/usbmount/mount.d/10_autocopy.sh

为挂载脚本(/etc/usb/mount.d)设置的变量:

  • UM_DEVICE:已安装的设备
  • UM_MOUNTPOINT:设备的挂载点
  • UM_FILESYSTEM:文件系统类型
  • UM_MOUNTOPTIONS:挂载选项
  • UM_VENDOR:设备的供应商字符串
  • UM_MODEL:型号或产品字符串

为卸载脚本设置的变量(/etc/usb/umount.d):

  • UM_DEVICE:已安装的设备
  • UM_MOUNTPOINT:设备的挂载点
  • UM_FILESYSTEM:文件系统类型

笔记:

  • 所有脚本默认以 root 用户身份执行。
  • 如果 VERBOSE=yes,usbmount 将使用 syslog 工具 -/etc/usbmount/usbmount.conf

相关内容