Как найти свободное место на подключенных томах с помощью Perl? - PullRequest
6 голосов
/ 11 февраля 2009

Я пытаюсь распаковать файл. Прежде чем распознать, я хотел бы узнать свободное место на подключенном томе. План таков: если не хватит места, я его не раскрою! Так как же найти свободное место на подключенном томе с помощью Perl? Кстати, я использую Perl для tar и untar.

Все говорят о df и dh, но эти команды не работают в точках монтирования. Что, если я хочу найти свободное место, в которое я могу записать в подключенной точке?

Ответы [ 4 ]

13 голосов
/ 11 февраля 2009

Скорее всего, вам нужен модуль CPAN Filesys :: DfPortable .

3 голосов
/ 13 февраля 2009

Использование команд оболочки для генерации одного числа без K, которое может использовать Perl:

Перейдите в каталог, в котором вы хотите разархивировать (если его там еще нет) и выполните:

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

Или заменить "." с фактической точкой монтирования.

grep избавляется от заголовка, а awk выводит килобайты, доступные как для строк с разделением, так и для строк без разделения.

Это основано на выводе следующего типа, вам, возможно, придется настроить, если ваш UNIX выводит что-то другое:

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
2 голосов
/ 11 февраля 2009

Вы можете просто использовать встроенные команды linux, чтобы получить результат:

my $vol = "/dev/volume";
my $freespace = `df $vol | grep '$vol' | awk '{print \$4}'`;
# free space in megabytes.
$freespace = sprintf("%01.2f", $freespace / 1024);
0 голосов
/ 19 апреля 2016

Попробуйте Filesys :: DF (система posix) или Filesys :: DfPortable (также для Windows). Они оба используют собственный код для перечисления статистики ФС.

...