Obtenga el espacio libre disponible en el directorio actual en Bash

25

Lo sé df -hy pwd, pero parece un poco complejo para la parte de coincidencia de expresiones regulares. ¿Algunas ideas?

Cheng
fuente
1
Quiso decir du -h?
jweyrich

Respuestas:

45

La salida se puede hacer un poco más fácil de analizar usando la -Popción que asegurará que:

  1. La información sobre cada sistema de archivos siempre se imprime exactamente en una línea; un dispositivo de montaje nunca se coloca solo en una línea. Esto significa que si el nombre del dispositivo de montaje tiene más de 20 caracteres (por ejemplo, para algunos montajes de red), las columnas están desalineadas.

Esto hace que sea mucho más fácil obtener solo el espacio libre disponible:

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

( -husa megabytes, gigabytes, etc.) Si su sistema no lo tiene, -kúselo solo para kilobytes).

Si pasamos dfuna ruta, solo devolverá 2 filas: una fila de encabezado y luego los datos sobre el sistema de archivos que contiene la ruta. Podemos usar la cola para agarrar solo la segunda fila. Sabemos que el espacio disponible está en la cuarta columna, por lo que tomamos eso con awk. Todo esto podría hacerse con awk:

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

o muchos otros conjuntos de filtros .

Steven D
fuente
Puede optimizar su comando utilizando la variable de entorno en $PWDlugar de utilizar la sustitución de comandos y eliminar la necesidad de cola: df -Ph $PWD | awk 'NR==2{print $4}'
SiegeX
@SiegeX: Estoy de acuerdo en que hacerlo todo awkes mejor. Incluí el comando más largo porque quería tener un ejemplo de cómo se puede construir una cadena de comandos simples para hacer algo más complicado. He actualizado la respuesta para incluir su mejora.
Steven D
-Pes estándar ( Pes para POSIX). Pero -hes una extensión GNU (también existe en algunos otros sistemas, pero, por ejemplo, en OpenBSD es incompatible con -P).
Gilles 'SO- deja de ser malvado'
Puede hacerlo sin usar el interruptor --output = avail: df -h --output=avail . | tail -1
Floyd
"Puedes optimizar tu comando". Realmente no. Ejecutar ambas tuberías 10'000 veces (como en time { I=0; while [ $I -lt 10000 ]; do df -Ph . | awk 'NR==2 {print $4}' > /dev/null; ((I++)); done }) no revela una diferencia significativa en la velocidad, lo que no es sorprendente: invocar tailno es costoso y awkse ahorrará para saltar al final de la entrada ... Puede haber habido una diferencia en el PDP-11 ...
David Tonhofer
10

¿Qué tal hacer df -h .? Esto le dará el espacio libre disponible de la partición en la que se encuentra su directorio de trabajo actual.

Un pequeño ejemplo:

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

En bytes:

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

Legible por humanos:

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
xerostomus
fuente