Ottieni lo spazio libero disponibile nella directory corrente in Bash


25

Lo so df -he pwd, ma sembra un po 'complesso per la parte di corrispondenza regex. Qualche idea?


1
Volevi dire du -h?
jweyrich,

Risposte:


45

L'output può essere reso un po 'più semplice da analizzare utilizzando l' -Popzione che garantirà che:

  1. Le informazioni su ciascun file system sono sempre stampate esattamente su una riga; un dispositivo di montaggio non viene mai messo in linea da solo. Ciò significa che se il nome del dispositivo di montaggio è più lungo di 20 caratteri (ad es. Per alcuni supporti di rete), le colonne non sono allineate.

Questo rende molto più semplice ottenere solo lo spazio libero disponibile:

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

( -hutilizza megabyte, gigabyte e così via. Se il sistema non lo possiede, utilizzare -ksolo per kilobyte.)

Se passiamo dfun percorso, restituirà solo 2 righe: una riga di intestazione e quindi i dati sul file system che contiene il percorso. Possiamo usare la coda per afferrare solo la seconda fila. Sappiamo che lo spazio disponibile è nella quarta colonna, quindi lo afferriamo con awk. Tutto ciò potrebbe essere fatto con awk:

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

o molti altri set di filtri .


Puoi ottimizzare il tuo comando usando la variabile d'ambiente $PWDinvece di usare la sostituzione dei comandi e rimuovere la necessità di coda: df -Ph $PWD | awk 'NR==2{print $4}'
SiegeX

@SiegeX: sono d'accordo che fare tutto awkmeglio è meglio. Ho incluso il comando più lungo perché volevo avere un esempio di come si possa costruire una catena di comandi semplici per fare qualcosa di più complicato. Ho aggiornato la risposta per includere il tuo miglioramento.
Steven D,

-Pè standard ( Pè per POSIX). Ma -hè un'estensione GNU (esistente anche su alcuni altri sistemi, ma ad esempio su OpenBSD è incompatibile con -P).
Gilles 'SO- smetti di essere malvagio' il

Puoi farlo senza uscire usando l'opzione --output = disp: df -h --output=avail . | tail -1
Floyd l'

"Puoi ottimizzare il tuo comando". Non proprio. Far funzionare entrambe le pipe 10'000 volte (come in time { I=0; while [ $I -lt 10000 ]; do df -Ph . | awk 'NR==2 {print $4}' > /dev/null; ((I++)); done }) non rivela alcuna differenza significativa nella velocità, il che non è sorprendente - invocare tailnon è costoso e awksarà risparmiato per saltare fino alla fine dell'ingresso ... Potrebbe esserci stata una differenza su il PDP-11 ...
David Tonhofer,

10

Che ne dici di fare df -h .. Questo ti darà lo spazio disponibile disponibile della partizione in cui si trova la tua directory di lavoro corrente.

Un piccolo esempio:

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

4

In byte:

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

Leggibile dagli umani:

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

o

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

o

df --output=avail -B 1 "$PWD" |tail -n 1 | numfmt --grouping
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.