Mi objetivo es obtener los discos mayores de 100G de lsblk.
Lo tengo funcionando, pero es incómodo. Estoy bastante seguro de que se puede acortar. Ya sea usando algo totalmente diferente a lsblk, o tal vez pueda filtrar números legibles por humanos directamente con awk.
Esto es lo que armé:
lsblk | grep disk | awk '{print$1,$4}' | grep G | sed 's/.$//' | awk '{if($2>100)print$1}'
Produce solo la parte sdx y nvmexxx de los discos de más de 100G. Exactamente lo que necesito.
Estoy contento con eso, pero estoy ansioso por aprender más de ustedes Gurus 😉
Respuestas:
Puede especificar la forma de salida que desea
lsblk
:Opciones utilizadas :
Entonces el filtrado es más fácil:
En su caso, eso sería
100*2^30
por 100GiB o100e9
/1e11
por 100GB.fuente
egrep '\d{12,}'
para eliminar líneas con <12 dígitos en una secuencia. Awk es, por supuesto, más universal.También puede indicar
lsblk
que salga en formato JSON y realice el filtrado conjq
:O:
Limitar a entradas de tipo
disk
.(
1e11
siendo 100 GB. Reemplace con107374182400
(o100*1024*1024*1024
) por 100 GiB. Debido al redondeo,lsblk
sin-b
informes 100G para tamaños que van desde aproximadamente 99.9278 a 100.0488 GiB (por alguna razón)Con
lsblk -OJb
,lsblk
informa toda la información disponible que le permite hacer una selección más detallada o generar información más o más relevante.También puede obtener la información directamente de
/sys
. Conzsh
:fuente
jq
(que aprendí hace solo unos meses).tratar
esto grep y filtro al mismo tiempo.
$4 ~ /G$/
obtener archivado con tamaño en G$4+0 > 100
obtener un tamaño superior a 100G{print $1}
imprimir NOMBREcomo regla, nunca debería necesitar usar
grep
yawk
en la misma tubería.para obtener solo el disco (y no la partición): filtrado awk
dónde
$6 == "disk"
seleccione solo columna con discopara obtener solo el disco (y no la partición): filtrado lsblk
dónde
--nodeps
: -d, --nodeps no imprime esclavos o titularesfuente
--no-deps
opción, de acuerdo con el estilo general de esa respuesta)