Se isso fizer parte de um programa usado pelo público em geral, tenha em mente que:
- Pode haver vários dispositivos com o mesmo par VID: PID;
- Um único disco (até mesmo um dispositivo USB) pode ter várias partições;
- No Linux, a mesma partição (sistema de arquivos) pode ser montada em vários lugares de uma só vez.
Isso disse:
Primeiro, use o udev para listar todos os dispositivos de bloco cujo pai tenha o VID: PID necessário, seja com base nas propriedades ID_ * ou nos atributos reais sysfs idVendor, idModel
:
$ udevadm trigger -v -n -s block -p ID_VENDOR_ID=3538 -p ID_MODEL_ID=0051
/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3/2-1.3:1.0/host6/target6:0:0/6:0:0:0/block/sdb
/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3/2-1.3:1.0/host6/target6:0:0/6:0:0:0/block/sdb/sdb1
Eu penso que é bastante seguro assumir que a última parte do nome sempre corresponderá ao /dev
name ...
Use findmnt
para listar os pontos de montagem:
$ findmnt -n -o TARGET /dev/sdb1
/run/media/grawity/A0D8-7268
Em combinação:
devs=$(udevadm trigger -v -n -s block -p ID_VENDOR_ID=… -p ID_MODEL_ID=…)
for dev in $devs; do
findmnt -n -o TARGET /dev/${dev##*/}
done
# alternative, based on the device's major:minor
for dev in $devs; do
findmnt -n -o TARGET $(<"$dev/dev")
done