Respuestas:
La salida se puede hacer un poco más fácil de analizar usando la -P
opción que asegurará que:
- 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}'
( -h
usa megabytes, gigabytes, etc.) Si su sistema no lo tiene, -k
úselo solo para kilobytes).
Si pasamos df
una 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 .
$PWD
lugar de utilizar la sustitución de comandos y eliminar la necesidad de cola: df -Ph $PWD | awk 'NR==2{print $4}'
awk
es 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.
-P
es estándar ( P
es para POSIX). Pero -h
es una extensión GNU (también existe en algunos otros sistemas, pero, por ejemplo, en OpenBSD es incompatible con -P
).
df -h --output=avail . | tail -1
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 tail
no es costoso y awk
se ahorrará para saltar al final de la entrada ... Puede haber habido una diferencia en el PDP-11 ...
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
du -h
?