检测我的USB插入并将其与目录同步的Bash脚本

18

有没有可以编写的Bash脚本和/或守护程序,可以检测特定的USB驱动器,并将该驱动器与目录进行同步?

4个回答

23

为了以后的参考,这里是如何在检测到 USB 设备时运行 bash 脚本。

连接您的设备并运行 lsusb 以检索设备的信息。您应该会看到类似于以下内容:

$ lsusb
Bus 002 Device 039: ID 0bc2:2100 Seagate RSS LLC
在这种情况下,设备的供应商ID是0bc2,产品ID是2100。
现在,您可以使用您选择的文本编辑器创建UDEV规则。 $ sudo vi /etc/udev/rules.d/85-my_usb_device_rule.rules
添加以下内容:
ACTION ==“add”,SUBSYSTEM ==“usb”,SYSFS {idVendor} ==“0bc2”, SYSFS {idProduct} ==“2100”,RUN + =“/home/myhome/my_script”
/home/myhome/my_script是指向脚本的路径,该脚本可以执行您想要的任何操作。
为了确保检测脚本将立即执行,请运行以下命令重新加载UDEV规则: $ sudo udevadm control --reload-rules
此方法已在Fedora 14上测试。

6
我曾在基于 Debian 的 Crunchbang Linux 11(waldorf)系统中使用此方法,但我必须将“SYSFS”更改为“ATTR”才能使其正常工作。这位作者发布了一个非常好的 udev 调试方法... http://www.jpichon.net/blog/2011/12/debugging-udev-rules/ - neildaemond

6

虽然我自己没有做过,但你可以尝试像这样使用udev规则:

# Hitachi SimpleDrive mini, model HTS545050B9A300 (500 GB USB HDD)
SUBSYSTEM=="block", ATTR{size}=="976768002", ATTRS{product}=="SimpleDrive mini", ATTRS{serial}=="2512009121920487", ACTION=="add", RUN+="/lib/udev/local.usb.hdd.sh add $devpath"

将其放置在/etc/udev/rules.d/90-local.rules或类似位置,具体取决于您的操作系统。


能否使用UUID并放弃所有其他属性? - Cascabel
抱歉,我不知道 - 这还在我的待办清单上 :) - Piotr Findeisen
嗨。它可以工作。谢谢。如果被拔掉怎么办?将“添加”改为“移除”也没有帮助。 - Mohammad Rahimi

3

这里是一个例子Python守护程序,您可以用于监听部分,然后将文件复制到您的目录中不应该是一个问题。


请尽量避免使用外部链接,因为该外部链接可能会过期。 - GeneCode

0

这里已经有很好的答案了,但根据您的用例,它可能只是简单的
[ -d /run/media/$USER/USB_STICK ] && do_stuff

这里的USB_STICK是USB闪存的标签。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接