Obtenez l'espace libre disponible dans le répertoire actuel de Bash

25

Je sais df -het pwd, mais cela semble un peu complexe pour la partie correspondant à l'expression régulière. Des idées?

Cheng
la source
1
Tu voulais dire du -h?
jweyrich

Réponses:

45

La sortie peut être rendue un peu plus facile à analyser en utilisant l' -Poption qui garantira que:

  1. Les informations sur chaque système de fichiers sont toujours imprimées sur exactement une ligne; un périphérique de montage n'est jamais mis en ligne seul. Cela signifie que si le nom du périphérique de montage comporte plus de 20 caractères (par exemple, pour certains montages réseau), les colonnes sont mal alignées.

Il est ainsi beaucoup plus facile d'obtenir uniquement l'espace libre disponible:

$ df -Ph . | tail -1 | awk '{print $4}'

( -hutilise des mégaoctets, des gigaoctets, etc. Si votre système ne l'a pas, utilisez -kuniquement des kilo-octets.)

Si nous passons dfun chemin, il ne renverra que 2 lignes: une ligne d'en-tête puis les données sur le système de fichiers qui contient le chemin. Nous pouvons utiliser la queue pour saisir uniquement la deuxième rangée. Nous savons que l'espace disponible est dans la 4e colonne, alors nous saisissons cela avec awk. Tout cela pourrait se faire avec awk:

$ df -Ph . | awk 'NR==2 {print $4}'

ou de nombreux autres ensembles de filtres .

Steven D
la source
Vous pouvez optimiser votre commande en utilisant la variable d'environnement $PWDau lieu d'utiliser la substitution de commande et de supprimer le besoin de queue: df -Ph $PWD | awk 'NR==2{print $4}'
SiegeX
@SiegeX: Je suis d'accord que tout awkest mieux. J'ai inclus la commande plus longue parce que je voulais avoir un exemple de la façon dont on peut construire une chaîne de commandes simples pour faire quelque chose de plus compliqué. J'ai mis à jour la réponse pour inclure votre amélioration.
Steven D
-Pest standard ( Pc'est pour POSIX). Mais -hc'est une extension GNU (qui existe également sur certains autres systèmes, mais par exemple sur OpenBSD, elle est incompatible avec -P).
Gilles 'SO- arrête d'être méchant'
Vous pouvez le faire sans sortir en utilisant le commutateur --output = avail: df -h --output=avail . | tail -1
Floyd
"Vous pouvez optimiser votre commande". Pas vraiment. L'exécution des deux tuyaux 10'000 fois (comme dans time { I=0; while [ $I -lt 10000 ]; do df -Ph . | awk 'NR==2 {print $4}' > /dev/null; ((I++)); done }) ne révèle aucune différence significative de vitesse, ce qui n'est pas étonnant - l'invocation tailn'est pas coûteuse et awksera épargnée pour passer à la fin de l'entrée ... Il pourrait y avoir une différence sur le PDP-11 ...
David Tonhofer
10

Que diriez-vous de faire df -h .. Cela vous donnera l'espace libre disponible de la partition dans laquelle se trouve votre répertoire de travail actuel.

Un petit exemple:

 /usr/local/nagios/libexec # df -h .
 Filesystem            Size  Used Avail Use% Mounted on
 /dev/mapper/vg00-lvol1
                       9.9G  6.1G  3.4G  65% /
Christian
la source
4

En octets:

df --output=avail -B 1 "$PWD" | tail -n 1

Lisible par l'homme:

df --output=avail -h "$PWD" | tail -n 1

ou

df --output=avail -B 1 "$PWD" |tail -n 1 | numfmt --to="iec"

ou

df --output=avail -B 1 "$PWD" |tail -n 1 | numfmt --grouping
xerostomus
la source