verificar ver total tamaño subcarpetas listar liberar espacio discos disco comando carpeta linux bash unix cut df

linux - ver - Obtenga espacio libre en disco con df para mostrar espacio libre en kb?



ver tamaño total de disco en linux (3)

Estoy tratando de generar la cantidad de espacio libre en disco en el sistema de archivos /example .

Si ejecuto el comando df -k /example puedo obtener buena información sobre el espacio disponible en el disco en kb, pero solo siendo humano y realmente mirándolo.

Necesito tomar estos datos y usarlos en otro lugar en mi script de shell. Inicialmente pensé en usar el cut pero luego mi guión no será portátil para otros discos ya que el espacio libre en el disco variará y el corte no producirá resultados precisos.

¿Cómo puedo obtener el resultado del espacio libre en disco del ejemplo en kb?


Puede usar el comando stat (2) para visualizar bloques libres y también para averiguar qué tan grande es cada bloque, por ejemplo

stat -f --printf="%a %s/n" /

mostrará el número de bloques libres (% a) en un sistema de archivos determinado (/) seguido de un tamaño de bloque (% s). Para obtener el tamaño en kB, puede usar el comando bc (1) como en el siguiente ejemplo:

stat -f --printf="%a * %s / 1024/n" / | bc

Finalmente, poner esto en una variable es simplemente una cuestión de usar la sustitución de retroceso (o $ () como en la primera respuesta):

SOMEVAR=`stat -f --printf="%a * %s / 1024/n" / | bc`


Mostrar solo columnas interesantes

df /example --total -k -h --output=source,avail

  • --total = gran total al final
  • -k = tamaño de bloque 1K
  • -h = humano legible
  • --output = [FIELD_LIST] lista de columnas para mostrar separadas por ","

No totalmente estándar (he visto - salida solo en las páginas man de Ubuntu), en este caso, Awk y otros solo para eliminar columnas no son necesarios.


Para que la salida de df muestre los datos en kb, solo necesita usar el indicador -k :

df -k

Además, si especifica un sistema de archivos para df , obtendrá los valores para ese específico, en lugar de todos ellos:

df -k /example

En cuanto al cuerpo de su pregunta: desea extraer la cantidad de espacio libre en disco en un sistema de archivos determinado. Esto requerirá algún procesamiento.

Dado un resultado df -k normal:

$ df -k /tmp Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 7223800 4270396 2586456 63% /

Puede obtener el Available (4ta columna) por ejemplo con awk o cut (previamente piping a tr para squeeze-repeats ( -s ) para espacios):

$ df -k /tmp | tail -1 | awk ''{print $4}'' 2586456 $ df -k /tmp | tail -1 | tr -s '' '' | cut -d'' '' -f4 2586456

Como siempre, si desea almacenar el resultado en una variable, use la sintaxis var=$(command) como esta:

$ myUsed=$(df -k /tmp | tail -1 | awk ''{print $4}'') $ echo "$myUsed" 2586456

Además, a partir del comentario de Tim Bunce , puede manejar nombres largos de sistemas de archivos usando --direct para obtener a - lugar, para que no se imprima una línea que rompa el motor:

$ df -k --direct /tmp Filesystem 1K-blocks Used Available Use% Mounted on - 7223800 4270396 2586456 63% /