截至目前,我已经设置了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
答案 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
拔下并重新插入您的设备进行测试。希望这有帮助!