1

Perl スクリプトに一連のディレクトリが存在するかどうかを確認する必要があります。ディレクトリは XXXX*YYY の形式で名前が付けられます。XXXX ごとに確認し、真であれば if ステートメントを入力する必要があります。

私のスクリプトには、$monitor_location (スキャンされるルート ディレクトリへのパスを含む) と $clientid (XXXX を含む) の 2 つの変数があります。

以下のコード スニペットは、私が行っていることの詳細を示すために拡張されています。各クライアント ID を返すクエリがあり、返されたレコードごとにループし、そのクライアント ID が使用するディスク容量を計算しようとしています。

これまでのところ、次のコードがあります(動作しません):

# loop for each client
while ( ($clientid, $email, $name, $max_record) = $query_handle1->fetchrow_array() )
{
  # add leading zeroes to client ID if needed
  $clientid=sprintf"%04s",$clientid;

  # scan file system to check how much recording space has been used
  if (-d "$monitor_location/$clientid\*") {
    # there are some call recordings for this client
    $str = `du -c $monitor_location/$clientid* | tail -n 1 2>/dev/null`;
    $str =~ /^(\d+)/;
    $client_recspace = $1;
    print "Client $clientid has used $client_recspace of $max_record\n";
  }
}

はっきり言って、XXXXで始まるフォルダがあればif文を入れたい。

これが理にかなっていることを願っています!ありがとう

4

2 に答える 2

5

globを使用してワイルドカードを展開できます。

for my $dir (grep -d, glob "$monitor_location/$clientid*") {
   ...
}
于 2012-07-25T16:01:46.540 に答える
1

私はグロブに対して「もの」を持っています。((私にとっては)一度しか機能しないようです。つまり、後で同じスクリプトで同じディレクトリを再度グロブすることはできませんでした。ただし、おそらく私だけです。)

私は readdir() の方が好きです。これは間違いなく長くなりますが、WFM です。

chdir("$monitor_location") or die;
open(DIR, ".") or die;
my @items = grep(-d, grep(/^$clientid/, readdir(DIR)));
close(DIR);

@items 内のすべてが、必要なものと一致します。

于 2012-07-25T16:21:10.640 に答える