¿Cómo puedo encontrar el espacio libre disponible en volúmenes montados utilizando Perl?

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

  •  22-08-2019
  •  | 
  •  

Pregunta

Estoy tratando de descomprimir un archivo. Antes de desempaquetarlo Me gustaría saber el espacio libre disponible en el volumen montado. El plan es que si no hay suficiente espacio no voy a descomprimir él! Entonces, ¿cómo puedo encontrar el espacio libre disponible en un volumen montado usando Perl? Por cierto, estoy usando Perl para alquitrán y untar.

Todo el mundo está diciendo sobre df y dh pero estos comandos no funciona en los puntos de montaje. ¿Qué pasa si quiero encontrar el espacio libre que puedo escribir en un punto montado?

¿Fue útil?

Solución

Uso shell comandos para generar un solo número gratuito K que Perl puede utilizar:

Cambio en el directorio donde desea descomprimir (si no está ya allí) y ejecutar:

df . | grep -v '^Filesystem' | awk 'NF=6{print $4}NF==5{print $3}{}'

O reemplazar "" con el punto de montaje real.

El grep se deshace de la cabecera y las impresiones de los awk fuera kilobytes disponibles para las líneas tanto de división y sin división.

Esto se basa en el siguiente tipo de salida, es posible que tenga que ajustar si su UNIX da salida a algo diferente:

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

Otros consejos

Es probable que desea que el módulo de CPAN Filesys :: DfPortable .

Se podía utilizar una función de comandos de Linux para obtener el resultado:

my $vol = "/dev/volume";
my $freespace = `df $vol | grep '$vol' | awk '{print \$4}'`;
# free space in megabytes.
$freespace = sprintf("%01.2f", $freespace / 1024);

Trate Filesys :: DF (sistema POSIX) o Filesys :: DfPortable (Windows también). Ambos utilizan el código nativo para enumerar las estadísticas FS.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top