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^30por 100GiB o100e9/1e11por 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
lsblkque salga en formato JSON y realice el filtrado conjq:O:
Limitar a entradas de tipo
disk.(
1e11siendo 100 GB. Reemplace con107374182400(o100*1024*1024*1024) por 100 GiB. Debido al redondeo,lsblksin-binformes 100G para tamaños que van desde aproximadamente 99.9278 a 100.0488 GiB (por alguna razón)Con
lsblk -OJb,lsblkinforma 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 > 100obtener un tamaño superior a 100G{print $1}imprimir NOMBREcomo regla, nunca debería necesitar usar
grepyawken 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-depsopción, de acuerdo con el estilo general de esa respuesta)