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

发布于 2024-07-14 00:22:51 字数 197 浏览 11 评论 0原文

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

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

I'm trying to untar a file. Before untarring I would like to know free space available on the mounted volume. The plan is if there is not enough space I will not untar it! So how can I find the free space available on a mounted volume using Perl? By the way, I'm using Perl for tar and untar.

Everybody is saying about df and dh but these commands doesn't work on the mount points. What if I want to find the free space that I can write into on a mounted point?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

听你说爱我 2024-07-21 00:22:51

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

You likely want the CPAN module Filesys::DfPortable.

萌化 2024-07-21 00:22:51

使用 shell 命令生成 Perl 可以使用的单个无 K 编号:

更改到要解压的目录(如果尚未存在)并执行:

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

Using shell commands to generate a single K-free number which Perl can use:

Change into the directory where you want to untar (if not already there) and execute:

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

Or replace "." with the actual mount point.

The grep gets rid of the header and the awk prints out the kilobytes available for both split and no-split lines.

This is based on the following sort of output, you may have to adjust if your UNIX outputs something different:

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
凯凯我们等你回来 2024-07-21 00:22:51

您可以使用内置的 linux 命令来获取结果:

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

You could just use built-in linux commands to get the result:

my $vol = "/dev/volume";
my $freespace = `df $vol | grep '$vol' | awk '{print \$4}'`;
# free space in megabytes.
$freespace = sprintf("%01.2f", $freespace / 1024);
一抹淡然 2024-07-21 00:22:51

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

Try Filesys::DF (posix system) or Filesys::DfPortable (Windows also). They both use native code to enumerate FS statistics.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文