
Мне нужно отфильтровать результат этой команды:
lsblk -rno "name,size,mountpoint,fstype" | grep -v 'sda'
Позвольте мне привести результат выполнения вышеуказанной команды на моем компьютере:
sdb 223,6G
sdb1 179,8G /VMs/qemu ext4
sdb2 29,5G [SWAP] swap
sdc 15G ntfs
sdd 7,5G
sdd1 7,5G ext4
Фильтрация, которая мне нужна: Только те, которые НЕ смонтированы и те, у которых есть файловая система, которую нужно оставить. Так что в идеале после фильтрации должно остаться:
sdc 15G ntfs
sdd1 7,5G ext4
Моя цель — иметь скрипт (который можно вызвать с помощью rofi или dmenu) для монтирования usb-накопителей. Я нашел решения в сети, но проблема с ними в том, что они предполагают, что все диски имеют разделы. Как видите, я использую внешние диски, отформатированные без предварительного разбиения на разделы (например, ntfs). Поэтому мне нужно это изменение.
решение1
Если вы упростите свои требования до списка разделов, которые не смонтированы, но содержат файловую систему, вы можете сделать это с помощьюawk
lsblk -rno name,size,mountpoint,fstype | awk 'NF==3 {print $1, $3}'
Фильтр awk
учитывает строки lsblk
, содержащие ровно три поля, разделенных пробелом, и печатает первое и третье поле.
Пример вывода
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
Если вам также нужен размер, просто опустите селектор вывода.
lsblk -rno name,size,mountpoint,fstype | awk 'NF==3'
mmcblk0p1 63M vfat