我需要自动检测插入,安装或未插入的任何USB驱动器,将未安装的USB驱动器安装在具有设备名称名称的文件夹中(默认情况下,它发生在Windows机器中)并获取所有设备的挂载点的路由。设备应安装在/ media / pi文件夹中(使用Raspberry Pi,因此pi是我的用户名)。这就是我正在做的事情:
获取所有贴片机设备的路径:
1)运行lsblk
,输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 1 14.4G 0 disk
└─sda1 8:1 1 14.4G 0 part /media/pi/D0B46928B4691270
sdb 8:16 1 14.3G 0 disk
└─sdb1 8:17 1 14.3G 0 part /media/pi/MI PENDRIVE
mmcblk0 179:0 0 14.9G 0 disk
├─mmcblk0p1 179:1 0 41.8M 0 part /boot
└─mmcblk0p2 179:2 0 14.8G 0 part /
2)通过特制的线条,我可以过滤掉一些不必要的信息:
我运行lsblk | grep 'sd' | grep 'media'
输出:
└─sda1 8:1 1 14.4G 0 part /media/pi/D0B46928B4691270
└─sdb1 8:17 1 14.3G 0 part /media/pi/MI PENDRIVE
我需要获得/media/pi/D0B46928B4691270
和/media/pi/MI PENDRIVE
,最好是在数组中。目前我正在这样做:
lsblk | grep 'sd' | grep 'media' | cut -d '/' -f 4
但它只适用于没有空格的路径,而grep的输出当然不是数组。用正则表达式做这个的干净方法是什么?
感谢。
答案 0 :(得分:2)
lsblk
支持带有-J
标志的json输出。我建议如果你想解析输出:
lsblk -J | jq '..|.?|select(.name|startswith("sd")).mountpoint // empty'
答案 1 :(得分:0)
这样的东西?
$ echo "$f"
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 1 14.4G 0 disk
└─sda1 8:1 1 14.4G 0 part /media/pi/D0B46928B4691270
sdb 8:16 1 14.3G 0 disk
└─sdb1 8:17 1 14.3G 0 part /media/pi/MI PENDRIVE
mmcblk0 179:0 0 14.9G 0 disk
├─mmcblk0p1 179:1 0 41.8M 0 part /boot
└─mmcblk0p2 179:2 0 14.8G 0 part /
$ grep -o '/media/.*$' <<<"$f"
/media/pi/D0B46928B4691270
/media/pi/MI PENDRIVE
$ IFS=$'\n' drives=( $(grep -o '/media/.*$' <<<"$f") )
$ printf '%s\n' "${drives[@]}"
/media/pi/D0B46928B4691270
/media/pi/MI PENDRIVE