J'essaie de générer la quantité d'espace disque libre sur le système de fichiers /example
.
Si j'exécute la commande df -k /example
Je peux obtenir de bonnes informations sur l'espace disque disponible en ko mais uniquement en étant humain et en le regardant.
Je dois prendre ces données et les utiliser ailleurs dans mon script Shell. J'ai d'abord pensé à utiliser cut
mais ensuite mon script ne sera pas portable sur d'autres disques car l'espace disque libre variera et la coupure ne produira pas de résultats précis.
Comment puis-je obtenir la sortie de l'espace disque libre d'exemple en Ko?
Pour obtenir la sortie de df
pour afficher les données en Ko, il vous suffit d'utiliser le drapeau -k
:
df -k
De plus, si vous spécifiez un système de fichiers à df
, vous obtiendrez les valeurs pour ce spécifique, au lieu de toutes:
df -k /example
Concernant le corps de votre question: vous souhaitez extraire la quantité d'espace disque libre sur un système de fichiers donné. Cela nécessitera un certain traitement.
Étant donné une sortie normale de df -k
:
$ df -k /tmp
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 7223800 4270396 2586456 63% /
Vous pouvez obtenir le Available
(4e colonne) par exemple avec awk
ou cut
(auparavant, vous canalisez vers tr
vers squeeze-repeats
(-s
) Pour les espaces):
$ df -k /tmp | tail -1 | awk '{print $4}'
2586456
$ df -k /tmp | tail -1 | tr -s ' ' | cut -d' ' -f4
2586456
Comme toujours, si vous souhaitez stocker le résultat dans une variable, utilisez la syntaxe var=$(command)
comme ceci:
$ myUsed=$(df -k /tmp | tail -1 | awk '{print $4}')
$ echo "$myUsed"
2586456
De plus, à partir du commentaire de Tim Bunce , vous pouvez gérer les noms de système de fichiers longs en utilisant --direct
Pour obtenir un -
À la place, afin qu'il n'imprime pas une ligne qui rompt le moteur:
$ df -k --direct /tmp
Filesystem 1K-blocks Used Available Use% Mounted on
- 7223800 4270396 2586456 63% /
Vous pouvez utiliser la commande stat (2) pour afficher les blocs libres et également pour connaître la taille de chaque bloc, par ex.
stat -f --printf="%a %s\n" /
affichera le nombre de blocs libres (% a) sur un système de fichiers donné (/) suivi d'une taille de bloc (% s). Pour obtenir la taille en Ko, vous pouvez utiliser la commande bc (1) comme dans l'exemple suivant:
stat -f --printf="%a * %s / 1024\n" / | bc
Enfin, pour mettre cela dans une variable, il suffit d'utiliser la substitution de backtick (ou $ () comme dans la première réponse):
SOMEVAR=`stat -f --printf="%a * %s / 1024\n" / | bc`
Afficher uniquement les colonnes intéressantes
df /example --total -k -h --output=source,avail
Pas tout à fait standard (j'ai vu --output uniquement dans les pages de manuel Ubuntu), dans ce cas, Awk et d'autres pour supprimer les colonnes ne sont pas nécessaires.
Voici une autre solution:
df --output=avail -m /example | tail -1
production:
6415