我正在通过perl脚本执行unix命令来获取direcory的大小。获取在perl脚本中执行unix命令的值
$path = "/dir1/di2/";
system("du -sh $path");
我怎样才能得到结果回我的Perl脚本。
我使用
$size = system("du -sh $path");
print $size
但它给大小= 0;
我正在通过perl脚本执行unix命令来获取direcory的大小。获取在perl脚本中执行unix命令的值
$path = "/dir1/di2/";
system("du -sh $path");
我怎样才能得到结果回我的Perl脚本。
我使用
$size = system("du -sh $path");
print $size
但它给大小= 0;
a system
调用返回调用的状态,而不是输出。使用反引号(或qx
运算符):
$size = qx(du -sh $path);
带空格的路径失败。对于名为“'; rm -rf /'”的路径来说尤其不好。 – ikegami
Perl的语法非常相似,猛砸之一。反引导您的命令,它的输出将存储在变量中。
my $variable = `command`;
print $variable;
如果您的命令对多行输出,可以将其分配给一个阵列,例如:
my @files = `ls -l`
chomp @files;
然后,每次输出线将存储在所述阵列的不同元件。
如何做反引用可能会有所不同,具体取决于您的键盘布局。在美国布局上,它是波浪号(〜)的同一个关键。
您也可以使用perl
(例如, as shown here。类似于
use File::Find;
find(sub { $size += -s if -f $_ }, $path);
+1纯perl解决方案。 – TLP
或者您可以将输出重定向到文件句柄并使用它获取输出。
open (FD,"du -hs \"$path\" |");
while (<FD>) {
...
}
-1这是一个[Perl常见问题](http://faq.perl.org):[为什么我不能使用system()获取命令的输出?](http:// learn.perl.org/faq/perlfaq8.html#Why-cant-I-get-the-output-of-a-command-with-system-) – daxim