मैंने इसके लिए सिर्फ एक स्क्रिप्ट बनाई है, यह बहुत सुंदर नहीं है लेकिन मेरे लिए काम करता है।
मैंने इस विन्यास के साथ आर्क लिनक्स पर इस स्क्रिप्ट का परीक्षण किया:
$ uname -a
Linux 4.4.13-1-lts #1 SMP Wed Jun 8 16:44:31 CEST 2016 x86_64 GNU/Linux
और मेरा डिवाइस का नाम /dev/sdb
जो कि आप से काफी अलग है, मुझे उम्मीद है कि यह आपके लिए भी काम करेगा।
यह भी ध्यान दें कि यह स्क्रिप्ट प्रोग्राम के usbutils
लिए पैकेज पर निर्भर करती है usb-devices
, मेरा मानना है कि इसकी स्थापना सभी लिनक्स पर डिफ़ॉल्ट रूप से की गई है, लेकिन मैं गलत हो सकता हूं।
स्क्रिप्ट 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
उपयोग:
$ ./usbname "$(lsusb | grep '<my_usb_label_or_id>')"
/dev/sdb
/dev/disk/
, बाय-लेबल और बाय-आईडी पथ उपयोग के हो सकते हैं।