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 に答える