Tôi vừa mới xây dựng một kịch bản cho điều đó, nó không hay nhưng hiệu quả với tôi.
Tôi đã thử nghiệm tập lệnh này trên Arch Linux với các cấu hình này:
$ uname -a
Linux 4.4.13-1-lts #1 SMP Wed Jun 8 16:44:31 CEST 2016 x86_64 GNU/Linux
Và tên thiết bị của tôi /dev/sdb
khá khác với tên của bạn, tôi hy vọng nó cũng sẽ phù hợp với bạn.
Cũng lưu ý rằng tập lệnh này phụ thuộc vào usbutils
gói cho usb-devices
chương trình, tôi tin rằng nó được cài đặt mặc định trên tất cả linux, nhưng tôi có thể sai.
Kịch bản usbname
:
#!/usr/bin/bash
# Input should be a single line from lsusb output:
DATA=$1
# Read the bus number:
BUS=`echo $DATA | grep -Po 'Bus 0*\K[1-9]+'`
# Read the device number:
DEV=`echo $DATA | grep -Po 'Device 0*\K[1-9]+'`
FOUND=false
USB_Serial=""
# Search for the serial number of the PenDrive:
while read line
do
if [ $FOUND == true ]; then
USB_Serial=`echo "$line" | grep -Po 'SerialNumber=\K.*'`
if [ "$USB_Serial" != "" ]; then
break;
fi
fi
if [ "`echo "$line" | grep -e "Bus=0*$BUS.*Dev#= *$DEV"`" != "" ]; then
FOUND=true
fi
done <<< "$(usb-devices)"
# Get the base name of the block device, e.g.: "sdx"
BASENAME=`file /dev/disk/by-id/* | grep -v 'part' | grep -Po "$USB_Serial.*/\K[^/]+$"`
# Build the full address, e.g.: "/dev/sdx"
NAME="/dev/$BASENAME"
# Output the address:
echo $NAME
Sử dụng:
$ ./usbname "$(lsusb | grep '<my_usb_label_or_id>')"
/dev/sdb
/dev/disk/
, các đường dẫn by-nhãn và by-id có thể được sử dụng.