Meu objetivo é obter os discos maiores que 100G do lsblk.
Eu tenho isso funcionando, mas é estranho. Tenho certeza que pode ser encurtado. Ou usando algo totalmente diferente do lsblk, ou talvez eu possa filtrar números legíveis por humanos diretamente com o awk.
Aqui está o que eu juntei:
lsblk | grep disk | awk '{print$1,$4}' | grep G | sed 's/.$//' | awk '{if($2>100)print$1}'
Ele produz apenas a parte sdx e nvmexxx dos discos maiores que 100G. Exatamente o que eu preciso.
Estou feliz com isso, mas estou ansioso para aprender mais com vocês Gurus ?
Você pode especificar a forma de saída desejada
lsblk
:Opções usadas :
Então a filtragem é mais fácil:
No seu caso, seria
100*2^30
para 100GiB ou100e9
/1e11
para 100GB.Você também pode dizer
lsblk
para produzir no formato JSON e fazer a filtragem comjq
:Ou:
Para limitar a entradas do tipo
disk
.(
1e11
sendo 100 GB. Substitua por107374182400
(ou100*1024*1024*1024
) por 100 GiB. Por causa do arredondamento,lsblk
ele próprio-b
informa 100G para tamanhos que variam de cerca de 99,9278 a 100,0488 GiB (por algum motivo))Com
lsblk -OJb
,lsblk
relata todas as informações disponíveis, o que permite fazer uma seleção mais refinada ou gerar informações mais ou mais relevantes.Você também pode obter as informações diretamente de
/sys
. Comzsh
:tentar
isso irá grep e filtrar ao mesmo tempo.
$4 ~ /G$/
ser arquivado com tamanho em G$4+0 > 100
obter tamanho superior a 100G{print $1}
imprimir NOMEcomo regra, você nunca deve precisar usar
grep
eawk
no mesmo pipe.para obter apenas disco (e nenhuma partição): filtragem awk
Onde
$6 == "disk"
selecione apenas coluna com discopara obter apenas disco (e nenhuma partição): filtragem lsblk
Onde
--nodeps
: -d, --nodeps não imprime escravos ou titulares