0

我正在通过 perl 脚本执行 unix 命令以获取目录的大小。

$path = "/dir1/di2/";
system("du -sh $path");

我怎样才能在我的 perl 脚本中得到结果。

我在用

$size = system("du -sh $path");
print $size

但它给出 size=0;

4

6 回答 6

5

您也可以使用 来执行此操作perl,例如此处所示。就像是

use File::Find;           
find(sub { $size += -s if -f $_ }, $path);
于 2012-06-24T13:35:41.420 回答
3

Perl 语法与 Bash 非常相似。反引号您的命令,它的输出将存储在变量中。

    my $variable = `command`;
    print $variable;

如果您的命令在多行上有输出,则可以将其分配给数组,例如:

    my @files = `ls -l`
    chomp @files;

然后,每个输出行将存储在数组的不同元素中。

如何进行反引号可能会因您的键盘布局而异。在美国布局上,它与波浪号 (~) 的键相同。

于 2012-06-24T13:20:23.453 回答
1

或者您可以将输出重定向到文件句柄并使用它来获取输出。

open (FD,"du -hs \"$path\" |");
while (<FD>) {
...
}
于 2012-06-25T17:57:21.997 回答
1

调用system返回调用的状态,而不是输出。使用反引号(或qx运算符),例如:

$size = qx(du -sh $path);
于 2012-06-24T13:14:59.293 回答
1

它正在返回命令状态,即成功。

相反,请执行以下操作:

$size = `du -sh $path`

(反引号分隔命令)

于 2012-06-24T13:17:20.703 回答
0
#!/bin/perl
$path = "/dir1/di2/";
print(qx(du -sh $path));

这应该工作!

于 2018-04-10T12:30:49.817 回答