
Preciso filtrar o resultado deste comando:
lsblk -rno "name,size,mountpoint,fstype" | grep -v 'sda'
Deixe-me dar o resultado do comando acima no meu computador:
sdb 223,6G
sdb1 179,8G /VMs/qemu ext4
sdb2 29,5G [SWAP] swap
sdc 15G ntfs
sdd 7,5G
sdd1 7,5G ext4
A filtragem que preciso é: Somente os que NÃO estão montados e os que possuem sistema de arquivos devem ser deixados. Então, idealmente, o que sobraria após a filtragem deveria ser:
sdc 15G ntfs
sdd1 7,5G ext4
Meu objetivo é ter um script (que pode ser chamado usando rofi do dmenu) para montar drives USB. Encontrei soluções na rede, mas o problema com elas é que elas assumem que todas as unidades possuem partições. Como você pode ver, eu uso unidades externas formatadas sem serem particionadas primeiro (o NTFS, por exemplo). Então eu preciso dessa mudança.
Responder1
Se você simplificar seu requisito para ser uma lista de partições que não estão montadas, mas que contêm um sistema de arquivos, você pode fazer isso usandoawk
lsblk -rno name,size,mountpoint,fstype | awk 'NF==3 {print $1, $3}'
O awk
filtro considera as linhas lsblk
que possuem exatamente três campos separados por espaço e imprime o primeiro e o terceiro campo.
Exemplo de saída
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
Se você quiser tamanho também, basta omitir o seletor de saída
lsblk -rno name,size,mountpoint,fstype | awk 'NF==3'
mmcblk0p1 63M vfat