Come faccio a trovare lo spazio libero disponibile su volumi montati utilizzando Perl?

StackOverflow https://stackoverflow.com/questions/536160

  •  22-08-2019
  •  | 
  •  

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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top