Mon objectif est d'obtenir des disques supérieurs à 100G auprès de lsblk.
Je le fais fonctionner, mais c'est gênant. Je suis sûr que cela peut être raccourci. Soit en utilisant quelque chose de totalement différent de lsblk, soit je peux filtrer les nombres lisibles par l'homme directement avec awk.
Voici ce que j'ai rassemblé:
lsblk | grep disk | awk '{print$1,$4}' | grep G | sed 's/.$//' | awk '{if($2>100)print$1}'
Il ne produit que la partie sdx et nvmexxx des disques supérieurs à 100G. Exactement ce dont j'ai besoin.
J'en suis content, mais j'ai hâte d'en savoir plus sur vous gourous ????
Vous pouvez spécifier la forme de sortie souhaitée à partir de lsblk
:
% lsblk -nblo NAME,SIZE
mmcblk0 15931539456
mmcblk0p1 268435456
mmcblk0p2 15662038528
-b, --bytes
Print the SIZE column in bytes rather than in human-readable format.
-l, --list
Use the list output format.
-n, --noheadings
Do not print a header line.
-o, --output list
Specify which output columns to print. Use --help to get a list of all supported
columns.
Ensuite, le filtrage est plus facile:
% lsblk -nblo NAME,SIZE | awk '$2 > 4*2^30 {print $1}' # greater than 4 GiB
mmcblk0
mmcblk0p2
Dans votre cas, ce serait 100*2^30
pour 100 Go ou 100e9
/1e11
pour 100 Go.
Vous pouvez également dire à lsblk
de sortir au format JSON et de faire le filtrage avec jq
:
$ lsblk -Jb | jq -r '..|select(.size? >= 1e11).name'
sda
sda2
Ou:
$ lsblk -Jb | jq -r '..|select(.type? == "disk" and .size? >= 1e11).name'
sda
Pour limiter aux entrées de type disk
.
(1e11
soit 100 Go. Remplacer par 107374182400
(ou 100*1024*1024*1024
) pour 100 Gio. En raison de l'arrondissement, lsblk
lui-même sans -b
signale 100G pour des tailles allant d'environ 99,9278 à 100,0488 GiB (pour une raison quelconque))
Avec lsblk -OJb
, lsblk
rapporte toutes les informations disponibles, ce qui vous permet de faire une sélection plus fine ou de produire des informations plus ou plus pertinentes.
Vous pouvez également obtenir les informations directement à partir de /sys
. Avec zsh
:
$ printf '%s\n' /sys/class/block/*(e'[(($(<$REPLY/size) * 512 >= 1e11))]':t)
sda
sda2
essayer
lsblk| awk '$4 ~ /G$/ && $4+0 > 100 {print $1}'
ce sera grep et filtrer en même temps.
$4 ~ /G$/
se classer avec la taille en G$4+0 > 100
obtenir une taille supérieure à 100G{print $1}
print NAMEen règle générale, vous ne devriez jamais avoir besoin d'utiliser grep
et awk
dans le même canal.
pour obtenir uniquement le disque (et pas de partition): filtrage awk
lsblk| awk '$4 ~ /G$/ && $4+0 > 100 && $6 == "disk" {print $1}'
où
$6 == "disk"
sélectionner uniquement la colonne avec le disquepour obtenir uniquement le disque (et pas de partition): filtrage lsblk
lsblk --nodeps| awk '$4 ~ /G$/ && $4+0 > 100 {print $1}'
où
--nodeps
: -d, --nodeps n'imprime pas les esclaves ou les détenteurs