Meu objetivo é obter os discos maiores que 100G do lsblk.
Eu tenho que trabalhar, mas é estranho. Tenho certeza de que pode ser reduzido. Ou usando algo totalmente diferente de lsblk, ou talvez eu possa filtrar números legíveis por humanos diretamente com awk.
Aqui está o que eu montei:
lsblk | grep disk | awk '{print$1,$4}' | grep G | sed 's/.$//' | awk '{if($2>100)print$1}'
Ele gera 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ê Gurus 😉
Respostas:
Você pode especificar a forma de saída desejada
lsblk
:Opções utilizadas :
Então a filtragem é mais fácil:
No seu caso, isso seria
100*2^30
para 100GiB ou100e9
/1e11
para 100GB.fonte
egrep '\d{12,}'
para remover linhas com <12 dígitos em uma sequência. Awk é obviamente mais universal.Você também pode solicitar
lsblk
a saída no formato JSON e fazer a filtragem comjq
:Ou:
Para limitar as 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 não-b
informa 100G para tamanhos que variam de 99,9278 a 100,0488 GiB (por algum motivo))Com
lsblk -OJb
,lsblk
reporta 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
:fonte
jq
(sobre a qual eu aprendi apenas alguns meses atrás).experimentar
isso irá grep e filtrar ao mesmo tempo.
$4 ~ /G$/
ficar arquivado com tamanho em G$4+0 > 100
obter tamanho acima de 100G{print $1}
imprimir NAMEComo regra, você nunca deve necessidade de usar
grep
eawk
no mesmo tubo.obter apenas disco (e nenhuma partição): filtro awk
Onde
$6 == "disk"
selecione apenas coluna com discoobter apenas disco (e nenhuma partição): filtragem lsblk
Onde
--nodeps
: -d, --nodeps não imprime escravos ou titularesfonte
--no-deps
opção, de acordo com o estilo geral de que a resposta)