GNU/Linux >> Tutoriales Linux >  >> Linux

Encuentre el tamaño y el espacio libre del sistema de archivos que contiene un archivo dado

A partir de Python 3.3, existe una forma sencilla y directa de hacerlo con la biblioteca estándar:

$ cat free_space.py 
#!/usr/bin/env python3

import shutil

total, used, free = shutil.disk_usage(__file__)
print(total, used, free)

$ ./free_space.py 
1007870246912 460794834944 495854989312

Estos números están en bytes. Consulte la documentación para obtener más información.


Esto no proporciona el nombre de la partición, pero puede obtener las estadísticas del sistema de archivos directamente usando statvfs Llamada al sistema Unix. Para llamarlo desde Python, use os.statvfs('/home/foo/bar/baz') .

Los campos relevantes en el resultado, según POSIX:

unsigned long f_frsize   Fundamental file system block size. 
fsblkcnt_t    f_blocks   Total number of blocks on file system in units of f_frsize. 
fsblkcnt_t    f_bfree    Total number of free blocks. 
fsblkcnt_t    f_bavail   Number of free blocks available to 
                         non-privileged process.

Entonces, para dar sentido a los valores, multiplique por f_frsize :

import os
statvfs = os.statvfs('/home/foo/bar/baz')

statvfs.f_frsize * statvfs.f_blocks     # Size of filesystem in bytes
statvfs.f_frsize * statvfs.f_bfree      # Actual number of free bytes
statvfs.f_frsize * statvfs.f_bavail     # Number of free bytes that ordinary users
                                        # are allowed to use (excl. reserved space)

Si solo necesita el espacio libre en un dispositivo, vea la respuesta usando os.statvfs() a continuación.

Si también necesita el nombre del dispositivo y el punto de montaje asociado con el archivo, debe llamar a un programa externo para obtener esta información. df proporcionará toda la información que necesita, cuando se le llame como df filename imprime una línea sobre la partición que contiene el archivo.

Para dar un ejemplo:

import subprocess
df = subprocess.Popen(["df", "filename"], stdout=subprocess.PIPE)
output = df.communicate()[0]
device, size, used, available, percent, mountpoint = \
    output.split("\n")[1].split()

Tenga en cuenta que esto es bastante frágil, ya que depende del formato exacto del df salida, pero no conozco una solución más robusta. (Hay algunas soluciones que se basan en el /proc sistema de archivos a continuación que son incluso menos portátiles que este.)


Linux
  1. Inodes y el sistema de archivos de Linux

  2. ¿Cómo encontrar espacio libre en disco y analizar el uso del disco?

  3. ¿Qué pasó con el espacio libre?

  4. ¿Por qué Ls y Hexdump no están de acuerdo sobre el tamaño del archivo?

  5. ¿Cómo encontrar el tipo de archivo Img y montarlo?

¿Encontrar la dirección Mac en el sistema de archivos?

¿Cómo encontrar el tamaño de inodo de un sistema de archivos ext2/ext3/ext4?

Encuentra el tamaño de RAM en Linux

¿Cuál es el comando más confiable para encontrar el tamaño real de un archivo de Linux?

¿Cómo encontrar el administrador de archivos predeterminado?

No más espacio en el sistema de archivos raíz, ¿cómo podría aumentar el tamaño?