GNU/Linux >> Linux Esercitazione >  >> Linux

Trova la dimensione e lo spazio libero del filesystem contenente un determinato file

A partire da Python 3.3, esiste un modo semplice e diretto per farlo con la libreria standard:

$ 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

Questi numeri sono in byte. Consulta la documentazione per maggiori informazioni.


Questo non fornisce il nome della partizione, ma puoi ottenere le statistiche del filesystem direttamente usando statvfs Chiamata di sistema Unix. Per chiamarlo da Python, usa os.statvfs('/home/foo/bar/baz') .

I campi rilevanti nel risultato, secondo 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.

Quindi, per dare un senso ai valori, moltiplica per 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)

Se ti serve solo lo spazio libero su un dispositivo, visualizza la risposta utilizzando os.statvfs() sotto.

Se hai bisogno anche del nome del dispositivo e del punto di montaggio associati al file, dovresti chiamare un programma esterno per ottenere queste informazioni. df fornirà tutte le informazioni di cui hai bisogno -- se chiamato come df filename stampa una riga sulla partizione che contiene il file.

Per fare un esempio:

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()

Nota che questo è piuttosto fragile, poiché dipende dal formato esatto del df output, ma non sono a conoscenza di una soluzione più robusta. (Ci sono alcune soluzioni che si basano sul /proc filesystem al di sotto che sono ancora meno portabili di questo.)


Linux
  1. Trova file e directory su Linux con il comando find

  2. Come trovare spazio libero su disco e analizzare l'utilizzo del disco?

  3. Cosa è successo allo spazio libero?

  4. Perché Ls e Hexdump non sono d'accordo sulla dimensione del file?

  5. Come trovare il tipo di un file Img e montarlo?

Inode e il filesystem di Linux

Come trovare la dimensione dell'inode di un filesystem ext2/ext3/ext4?

Trova la dimensione della RAM in Linux

qual è il comando più affidabile per trovare la dimensione effettiva di un file linux

Come trovare il file manager predefinito?

AWK e nomi di file con spazio al suo interno.