6

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

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

4

4 回答 4

13

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

于 2009-02-11T09:55:40.210 回答
3

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

切换到要解压的目录(如果还没有的话)并执行:

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

或替换“。” 与实际的安装点。

grep 去掉了标题,awk 打印出可用于拆分行和非拆分行的千字节。

这是基于以下类型的输出,如果您的 UNIX 输出不同,您可能需要进行调整:

文件系统 1K-blocks Used 可用 Use% Mounted on
/dev/sda4 206434224 56965356 139065176 30% /
varrun 1037296 132 1037164 1% /var/run
varlock 1037296 0 1037296 0% /var/lock
开发 1037296 68 1037228 1% /开发
devshm 1037296 12 1037284 1% /dev/shm
/dev/sda2 93327 43535 44973 50% /boot
/dev/sdc1 155056484 29417456 117824612 20% /media/extra160
gvfs-fuse 守护进程
              206434224 56965356 139065176 30% /home/pax/.gvfs
于 2009-02-13T11:26:37.837 回答
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);
于 2009-02-11T10:00:54.693 回答
0

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

于 2016-04-18T21:14:23.450 回答