我正在通過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