Ich muss die Gerätenamen aller angeschlossenen USB-Festplatten (dh sdd
) abrufen .
Ich habe 3 USB-Festplatten angeschlossen und 2 SATA-Festplatten:
$ find /sys/devices/ -name block
/sys/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.0/host5/target5:0:0/5:0:0:0/block
/sys/devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/host6/target6:0:0/6:0:0:0/block
/sys/devices/pci0000:00/0000:00:14.0/usb4/4-5/4-5:1.0/host4/target4:0:0/4:0:0:0/block
/sys/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block
/sys/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block
Ich möchte die SATA-Festplatten ignorieren, muss aber alle USB-Festplatten auflisten.
Im Terminal kann ich uns ls
und es wird mir geben sdd
:
$ ls /sys/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.0/host5/target5:0:0/5:0:0:0/block
sdd
Aber ich muss dies in einem Skript verwenden. Ich muss über alle USB-Festplatten iterieren, und ich kenne den genauen Pfad nicht im Voraus, daher muss ich Platzhalter ( *
oder ?
) verwenden:
for DISK in $(ls /sys/devices/pci0000:00/0000:00:14.0/usb?/*/*:1.0/host?/target?:0:0/?:0:0:0/block) ; do
echo /dev/$DISK
done
Das obige funktioniert nur, wenn ein USB-Laufwerk angeschlossen ist. Wenn zwei oder mehr Festplatten angeschlossen sind, erhalte ich sdd
ebenso den /sys
Pfad, den ich nicht möchte, dh:
/dev//sys/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.0/host5/target5:0:0/5:0:0:0/block:
/dev/sdd
/dev//sys/devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/host6/target6:0:0/6:0:0:0/block:
/dev/sde
/dev//sys/devices/pci0000:00/0000:00:14.0/usb4/4-5/4-5:1.0/host4/target4:0:0/4:0:0:0/block:
/dev/sdc
Wie kann ich nur wiederholen sdd
sde
sdc
?
Ich suche nach einer Lösung, die keine udev
Infrastruktur nutzt , dh/dev/disk/by-path/
quelle
for loop
Beispiel verwenden?