1

我需要检查 Perl 脚本中是否存在任何一组目录。目录以 XXXX*YYY 格式命名 - 我需要检查每个 XXXX 并输入 if 语句,如果为真。

在我的脚本中,我有两个变量 $monitor_location(包含被扫描的根目录的路径)和 $clientid(包含 XXXX)。

下面的代码片段已被扩展以显示更多我正在做的事情。我有一个返回每个客户端 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

我有一个反对 glob 的“东西”。(它似乎只工作一次(对我来说),这意味着你以后不能在同一个脚本中再次重新 glob 同一个目录。不过,它可能只是我。)

我更喜欢 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 回答