我正在通过 perl 脚本执行 unix 命令以获取目录的大小。
$path = "/dir1/di2/";
system("du -sh $path");
我怎样才能在我的 perl 脚本中得到结果。
我在用
$size = system("du -sh $path");
print $size
但它给出 size=0;
您也可以使用 来执行此操作perl
,例如此处所示。就像是
use File::Find;
find(sub { $size += -s if -f $_ }, $path);
Perl 语法与 Bash 非常相似。反引号您的命令,它的输出将存储在变量中。
my $variable = `command`;
print $variable;
如果您的命令在多行上有输出,则可以将其分配给数组,例如:
my @files = `ls -l`
chomp @files;
然后,每个输出行将存储在数组的不同元素中。
如何进行反引号可能会因您的键盘布局而异。在美国布局上,它与波浪号 (~) 的键相同。
或者您可以将输出重定向到文件句柄并使用它来获取输出。
open (FD,"du -hs \"$path\" |");
while (<FD>) {
...
}
调用system
返回调用的状态,而不是输出。使用反引号(或qx
运算符),例如:
$size = qx(du -sh $path);
它正在返回命令状态,即成功。
相反,请执行以下操作:
$size = `du -sh $path`
(反引号分隔命令)
#!/bin/perl
$path = "/dir1/di2/";
print(qx(du -sh $path));
这应该工作!