¿Cómo puedo encontrar el espacio libre disponible en volúmenes montados utilizando Perl?
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?
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.