Holen Sie sich den freien Speicherplatz im aktuellen Verzeichnis in Bash

25

Ich weiß df -hund pwd, aber es scheint ein wenig komplex für den Regex-Matching-Teil. Irgendwelche Ideen?

Cheng
quelle
1
Meinten Sie du -h?
Jweyrich

Antworten:

45

Die Ausgabe kann durch die Verwendung der folgenden -POption etwas einfacher analysiert werden :

  1. Die Informationen zu jedem Dateisystem werden immer in genau einer Zeile gedruckt. Ein Mount-Gerät wird niemals von alleine in eine Leitung geschaltet. Dies bedeutet, dass die Spalten falsch ausgerichtet sind, wenn der Mount-Gerätename länger als 20 Zeichen ist (z. B. für einige Netzwerkmounts).

Dadurch wird es viel einfacher, nur den verfügbaren Speicherplatz abzurufen:

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

( -hVerwendet Megabyte, Gigabyte usw. Wenn Ihr System nicht über sie verfügt, verwenden Sie sie nur -kfür Kilobyte.)

Wenn wir dfeinen Pfad übergeben, werden nur zwei Zeilen zurückgegeben: eine Kopfzeile und dann die Daten über das Dateisystem, das den Pfad enthält. Wir können den Schwanz benutzen, um nur die zweite Reihe zu ergreifen. Wir wissen, dass der verfügbare Platz in der 4. Spalte ist, also greifen wir zu awk. Dies alles könnte getan werden mit awk:

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

oder viele andere Filtersätze .

Steven D
quelle
Sie können Ihren Befehl optimieren, indem Sie die Umgebungsvariable verwenden, $PWDanstatt die Befehlsersetzung zu verwenden und das Ende zu entfernen: df -Ph $PWD | awk 'NR==2{print $4}'
SiegeX
@SiegeX: Ich bin damit einverstanden, dass alles awkbesser ist. Ich habe den längeren Befehl eingefügt, weil ich ein Beispiel haben wollte, wie man eine Kette einfacher Befehle erstellen kann, um etwas Komplizierteres zu tun. Ich habe die Antwort aktualisiert, um Ihre Verbesserung einzuschließen.
Steven D
-Pist Standard (das Pist für POSIX). Ist -haber eine GNU-Erweiterung (auch auf einigen anderen Systemen vorhanden, aber zB unter OpenBSD ist sie nicht kompatibel -P).
Gilles 'SO - hör auf böse zu sein'
Sie können dies ohne Ausgabe tun, indem Sie den Schalter --output = avail verwenden: df -h --output=avail . | tail -1
Floyd
"Sie können Ihren Befehl optimieren". Nicht wirklich. Das 10'000-fache Durchlaufen beider Pipes (wie in time { I=0; while [ $I -lt 10000 ]; do df -Ph . | awk 'NR==2 {print $4}' > /dev/null; ((I++)); done }) zeigt keinen bedeutenden Geschwindigkeitsunterschied, was nicht verwunderlich ist - Aufrufen tailist nicht teuer und awkerspart das Überspringen bis zum Ende der Eingabe ... Möglicherweise ist ein Unterschied aufgetreten die PDP-11 ...
David Tonhofer
10

Wie wäre es damit df -h . . Dadurch erhalten Sie den verfügbaren freien Speicherplatz der Partition, in der sich Ihr aktuelles Arbeitsverzeichnis befindet.

Ein kleines Beispiel:

 /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
quelle
4

In Bytes:

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

Für Menschen lesbar:

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

oder

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

oder

df --output=avail -B 1 "$PWD" |tail -n 1 | numfmt --grouping
Xerostomus
quelle