web-dev-qa-db-fra.com

Comment capturer le pourcentage d'utilisation du disque d'une partition sous forme d'entier?

Je voudrais une méthode pour capturer l'utilisation du disque d'une partition particulière, en utilisant le répertoire où la partition est montée. La sortie devrait simplement être un entier sans remplissage ni symbole, comme j'aimerais le sauvegarder dans une variable.

J'ai utilisé df --output=pcent /mount/point, mais j'ai besoin de rogner la sortie car elle comporte un en-tête inutile, un espace de remplissage avant la valeur et un symbole% suivant la valeur:

Use%
 83%

Dans ce cas, le résultat souhaité serait simplement 83. Je ne suis au courant d'aucun inconvénient à utiliser le résultat de df, mais je suis heureux d'accepter d'autres méthodes qui ne le reposent pas.

16
Arronical

J'utiliserais ...

df --output=pcent /mount/point | tr -dc '0-9'

Je ne sais pas si sed est plus rapide, mais je ne me souviens jamais de ses valeurs.

19
user508889

Voici la solution awk:

$ df --output=pcent /mnt/HDD | awk -F'%' 'NR==2{print $1}'   
 37

En gros, ce qui se passe ici, c'est que nous traitons le caractère '%' comme séparateur de champ (séparateur de colonne) et n'imprimons la première colonne $ 1 que lorsque le nombre d'enregistrements est égal à deux (la partie NR==2)

Si nous voulions utiliser des outils bash- only, nous pourrions faire quelque chose comme ceci:

bash-4.3$ df --output=pcent / | while IFS= read -r line; do 
>     ((c++)); 
>     [ $c -eq 2 ] && echo "${line%\%*}" ;
> done
 74

Et pour le plaisir, alternative sed via le groupe de capture et -r pour les expressions rationnelles étendues:

df --output=pcent | sed -nr '/[[:digit:]]/{s/[[:space:]]+([[:digit:]]+)%/\1/;p}'
8

Vous pouvez diriger vers un grep qui extrait uniquement les chiffres:

df --output=pcent /mount/point | grep -o '[0-9]*'

Voir en direct:

$ echo "Use%
> 83%" | grep -o '[0-9]*'
83
7
fedorqui

sed solution

df --output=pcent /mount/point | sed '1d;s/^ //;s/%//'
  • 1d supprimer la première ligne
  • ; pour séparer les commandes
  • s/^ // supprime un espace au début des lignes
  • s/%// remove % sign
6
Zanna

Solution Bash en deux étapes

Étant un peu fan de Borne Again (Borne Again Shell) l'année dernière, je pensais proposer une solution en l'utilisant.

$ DF_PCT=$(df --output=pcent /mnt/d)
$ echo ${DF_PCT//[!0-9]/}
5
  • La ligne 1 capture dfsortie dans la variable DF_PCT.
  • La ligne 2 supprime tout ce qui n’est pas un chiffre dans DF_PCT et l’affiche à l’écran.
  • L'avantage par rapport à la réponse acceptée est le saut de ligne après le pourcentage (5 dans ce cas).
1
WinEunuuchs2Unix

Je suis tombé sur un serveur où --output = pcent n'était pas encore implémenté. J'ai donc utilisé la sortie normale, filtrée par colonne, suivie de la regex: df /mount/point | awk '{print $5}' | tr -dc '0-9'

1
Ramon Fincken