2015-10-13 1 views
0

Je voudrais obtenir l'espace disque restant dans mon répertoire:Get espace disque restant de la sortie de df

df -h 
Filesystem  Size Used Avail Use% Mounted on 
rootfs   20G 15G 3.5G 81%/
/dev/root  20G 15G 3.5G 81%/
devtmpfs  990M 4.0K 990M 1% /dev 
none   199M 2.7M 196M 2% /run 
none   5.0M  0 5.0M 0% /run/lock 
none   991M 12K 991M 1% /run/shm 
/dev/sda2  894G 847G 1.9G 100% /home 

Note: Tout ce que je besoin de la sortie ci-dessus est 1.9G

+0

Voici un indice: 'awk' est ton ami. –

Répondre

2

utilisation grep pour ne prendre que la/ligne de la maison et awk pour obtenir que le champ que vous voulez:

df -h | grep -w /home | awk '{print $4}' 
+0

Génial, je suis encore débutant, si vous pouviez m'expliquer s'il vous plaît –

+1

@OumAlaa: 'grep -w/home' imprime seulement des lignes de la sortie de 'df -h' qui contient la chaîne'/home' comme un mot entier. Le résultat est envoyé à 'awk', qui n'imprime alors que le 4e champ séparé par des espaces sur cette ligne, ce qui représente la quantité d'espace disque restant. [explainhell.com] (http://explainshell.com) est un excellent site pour analyser les lignes de commande shell; voici l'explication de 'grep -w/home': http://explainshell.com/explain?cmd=grep+-w+%2Fhome. – mklement0

+0

@OumAlaa: Bien que cela ne soit pas un problème réel en termes de performance, il n'est pas nécessaire d'avoir 'grep' - et donc un processus supplémentaire - parce que' awk' peut facilement - et plus précisément - effectuer le même test pour la présence de '/ home', comme en témoigne ma réponse. Cela dit, il est parfois plus facile de diviser le processus en étapes plus petites, ce qui est acceptable, tant que la performance n'est pas un problème. – mklement0

0

Donner cette un essai:

df -h | awk '{print $4}' 
+0

J'ai édité ma question ci-dessus –

+0

Réponse éditée pour correspondre. –

+0

Ceci est la sortie: 'df -h | awk '{print $ 4}' Avail 3.3G 3.3G 990M 5.0M 196 M 991m 773M' mais j'ai besoin que le dernier –

0

Alors rond-point, et lié à ext2, voici une façon avec tune2fs

tune2fs /dev/sdc1 -l | egrep '^(Free blocks|Block size)' | 
    cut -d: -f2 | xargs | 
    while read free size; 
    do 
     echo "$free blocks of size $size free: $((($size*$free)>>20)) mebibytes" 
    done 
1

essayez la commande awk suivante:

df -h | awk '$6 == "/home" { print $4 }' 
  • $6 == "/home" traite uniquement la (une) ligne dont la sixième colonne séparés par des espaces contient /home.
  • { print $4 } imprime le 4e champ séparé par des espaces sur cette ligne, qui est l'espace disque restant.
+0

utiles, si gentil de votre part, je ne suis pas au courant « awk " –

+0

@OumAlaa: Mon plaisir; 'awk' vaut la peine d'apprendre; c'est un puissant outil de traitement de texte - voir https://en.wikipedia.org/wiki/AWK pour le fond. – mklement0

+0

Merci beaucoup, appréciez-le –

1

Essayez l'une des commandes suivantes:

$ grep -o 1.9G <(df -h) 
$ df -h|awk '/home/{print $4}' 
$ grep home <(df -h) | awk '{print $4}' 
$ df=($(tail -1 <(df -h))) echo ${df[3]} 
$ vi -es +'%j|norm 3dWWd$' -c%p -cq! <(df -h) 
$ printf "%s\n" $(tail -1 <(df -h))|tail -3|head -1 
$ ex -s <(df -h|egrep -o "\S+\s+\S+\s+/home") +'norm Wd$' +%p -cq! 
+0

C'est essentiellement: 'grep'/filter-by home <([substitution de processus] (https://en.wikipedia.org/wiki/Process_substitution))' '' 'awk' {print 4th colonne} – kenorb

+0

Génial, j'aime bien –