ディレクトリのサイズを取得するために、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));
これはうまくいくはずです!