Come faccio a trovare lo spazio libero disponibile su volumi montati utilizzando Perl?
Domanda
Sto cercando di decomprimere un file. Prima di scompattazione Vorrei conoscere lo spazio libero disponibile sul volume montato. Il piano è, se non c'è abbastanza spazio non voglio decomprimere esso! Allora, come faccio a trovare lo spazio libero disponibile su un volume montato utilizzando Perl? A proposito, sto usando Perl per catrame e scompattarlo.
Tutti stanno dicendo circa df
e dh
ma questi comandi non funziona sui punti di montaggio. Che cosa succede se voglio trovare lo spazio libero che posso scrivere in un punto montato?
Soluzione
Uso shell comandi per generare un unico numero K che Perl può utilizzare:
Cambia nella directory in cui si desidera decomprimere (se non è già lì) ed eseguire:
df . | grep -v '^Filesystem' | awk 'NF=6{print $4}NF==5{print $3}{}'
O sostituire "" con il punto di montaggio vero e proprio.
Il grep elimina l'intestazione e le stampe awk fuori i kilobyte disponibili sia per dividere e non-split linee.
Questa si basa sulla seguente tipo di uscita, potrebbe essere necessario modificare se il vostro UNIX uscite qualcosa di diverso:
Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda4 206434224 56965356 139065176 30% / varrun 1037296 132 1037164 1% /var/run varlock 1037296 0 1037296 0% /var/lock udev 1037296 68 1037228 1% /dev devshm 1037296 12 1037284 1% /dev/shm /dev/sda2 93327 43535 44973 50% /boot /dev/sdc1 155056484 29417456 117824612 20% /media/extra160 gvfs-fuse-daemon 206434224 56965356 139065176 30% /home/pax/.gvfs
Altri suggerimenti
È probabile che desidera che il modulo di CPAN Filesys :: DfPortable .
Si potrebbe utilizzare built-in comandi Linux per ottenere il risultato:
my $vol = "/dev/volume";
my $freespace = `df $vol | grep '$vol' | awk '{print \$4}'`;
# free space in megabytes.
$freespace = sprintf("%01.2f", $freespace / 1024);
Filesys :: DF (sistema POSIX) o Filesys :: DfPortable (Windows anche). Entrambi utilizzano codice nativo per enumerare le statistiche FS.