
Ich muss das Ergebnis dieses Befehls filtern:
lsblk -rno "name,size,mountpoint,fstype" | grep -v 'sda'
Hier ist ein Ergebnis des obigen Befehls auf meinem Computer:
sdb 223,6G
sdb1 179,8G /VMs/qemu ext4
sdb2 29,5G [SWAP] swap
sdc 15G ntfs
sdd 7,5G
sdd1 7,5G ext4
Die Filterung, die ich brauche, ist: Nur diejenigen, die NICHT gemountet sind und diejenigen, die ein Dateisystem haben, müssen übrig bleiben. Was also nach der Filterung im Idealfall übrig bleiben sollte, ist:
sdc 15G ntfs
sdd1 7,5G ext4
Mein Ziel ist es, ein Skript zu haben (das mit rofi oder dmenu aufgerufen werden kann), um USB-Laufwerke zu mounten. Ich habe im Internet Lösungen gefunden, aber das Problem dabei ist, dass sie davon ausgehen, dass alle Laufwerke partitioniert sind. Wie Sie sehen, verwende ich externe Laufwerke, die ohne vorherige Partitionierung formatiert wurden (z. B. NTFS). Ich brauche also diese Änderung.
Antwort1
Wenn Sie Ihre Anforderung auf eine Liste von Partitionen vereinfachen, die nicht gemountet sind, aber ein Dateisystem enthalten, können Sie dies tun mitawk
lsblk -rno name,size,mountpoint,fstype | awk 'NF==3 {print $1, $3}'
Der awk
Filter berücksichtigt Zeilen, lsblk
die genau drei durch Leerzeichen getrennte Felder haben, und druckt das erste und dritte Feld.
Beispielausgabe
lsblk -rno name,size,mountpoint,fstype
mmcblk0 29.8G
mmcblk0p1 63M vfat
mmcblk0p2 4G / ext4
lsblk -rno name,size,mountpoint,fstype | awk 'NF==3 {print $1, $3}'
mmcblk0p1 vfat
Wenn Sie auch die Größe wollen, lassen Sie einfach den Ausgabeselektor weg
lsblk -rno name,size,mountpoint,fstype | awk 'NF==3'
mmcblk0p1 63M vfat