如何使用Perl找到已安装卷上的可用空间?

时间:2009-02-11 09:53:14

标签: perl diskspace

我正在尝试解压文件。在解开之前,我想知道已安装卷上的可用空间。计划是如果没有足够的空间我不会解开它!那么如何使用Perl找到已安装卷上的可用空间?顺便说一句,我使用Perl作为tar和untar。

每个人都在说dfdh,但这些命令对挂载点不起作用。如果我想在安装点上找到可以写入的空闲空间怎么办?

4 个答案:

答案 0 :(得分:13)

您可能需要CPAN模块Filesys::DfPortable

答案 1 :(得分:3)

使用shell命令生成Perl可以使用的单个K-free数字:

切换到要解压缩的目录(如果尚未存在)并执行:

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 :(得分:2)

你可以使用内置的linux命令来获得结果:

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

答案 3 :(得分:0)

尝试Filesys::DF(posix系统)或Filesys::DfPortable(Windows也是如此)。它们都使用本机代码来枚举FS统计信息。