执行从最新USB udev插入设备读取的脚本

时间:2014-10-04 14:33:13

标签: linux bash usb udev

截至目前,我已经设置了udev设置,以便在插入或移除USB闪存驱动器时执行脚本,但我仍然试图弄清楚是否有某种方法可以执行脚本以从插入的最新USB设备中读取文件。

我正在使用usbmount自动安装我的所有闪存驱动器,并按照此方案安装:

/dev/sdb1 15G 8.0K 15G 1% /media/usb0 /dev/sdc1 15G 8.0K 15G 1% /media/usb1 /dev/sdd1 15G 8.0K 15G 1% /media/usb2 /dev/sde1 15G 8.0K 15G 1% /media/usb3

例如,当我插入USB闪存驱动器#5时,它会自动挂载到/ media / usb4,然后我想说执行' cat /media/usb4/data.txt> /tmp/output.txt'并且只有那个刚插入的驱动器。理想情况下,无论分配给/ media / usbx的编号,我都希望这个工作,所以如果我重新插入设备2,它将只为该设备执行脚本,而不是其余的

关于如何通过bash脚本完成此操作的任何想法,但最好是对其他想法开放。

感谢您的时间。

-------------编辑

我想出了一种方法,虽然它绝对不是最漂亮的,甚至可能是最可靠的:

$ sudo tail -n2 /var/log/syslog
Oct  4 14:40:58 development usbmount[32250]: executing command: mount -tvfat -osync,noexec,nodev,noatime,nodiratime /dev/sda1 /media/usb0
Oct  4 14:40:58 development usbmount[32250]: executing command: run-parts /etc/usbmount/mount.d
$

好的,现在将其降低到媒体挂载点,

$ sudo tail -n2 /var/log/syslog |grep media | awk '{print $12}'
/media/usb0
$

假设没有其他错误或任何填充syslog上最后两个位置的内容,我可以使用以下内容执行脚本:

#!/bin/bash
device=`sudo tail -n2 /var/log/syslog |grep media | awk '{print $12}'`

cat $device/data.txt > /tmp/output.txt

1 个答案:

答案 0 :(得分:1)

run-parts位是一个提示...您可以创建一个文件 /etc/usbmount/mount.d/50_copydata

这样的事情:

#!/bin/bash
set -u
[[ -f "${UM_MOUNTPOINT}/data.txt" ]] && cat "${UM_MOUNTPOINT}/data.txt" > /tmp/output.txt

usbmount会将$ UM_MOUNTPOINT设置为 / media / usb0 。我使用set -u来确保只有在设置$ UM_MOUNTPOINT时才执行它。

我假设您要过滤数据 - 如果您只是cat该文件,您也可以使用cp

请记住使文件可执行:

chmod +x /etc/usbmount/mount.d/50_copydata

拔下并重新插入您的设备进行测试。希望这有帮助!