获取数组的输出,并将其放入新数组(perl 脚本)

获取数组的输出,并将其放入新数组(perl 脚本)

我设置了一个阵列来检查不同的工作站以查看是否存在任何日志,如果存在日志,则将其删除。问题是,每次我执行脚本时,它都必须每次爬行所有工作站(删除日志的命令一次只能执行一次)。有没有办法第一次检查所有工作站,如果存在日志,则设置下一个阵列以仅检查存在日志的工作站?以此类推,直到没有人留下为止?当只有 10 个左右的工作站有日志时,检查 100 个不同的工作站需要花费一些时间。这是我到目前为止所拥有的(Unix AIX 和 perl v5.6.1):

my @workstation = qw(ws1 ws2 ws3 ws4 ws5 ws6 ws7 ws8 ws9 ws10 ws11 ws12);

foreach my $workstation (@workstation){
$logcount = `ssh -q $workstation "ls /logs/$workstation | wc -l"`;
chomp $logcount;

if($logcount == 0){
print "";
}

if($logcount > 0){
print "$workstation: $count\n";
`ssh -q $workstation "/tools/log_remover /logs/$workstation"`
}

答案1

如果您只想删除它们,为什么要检查计数?直接删除文件。简单的 bash 版本可删除超过 7 天的日志:

#!/bin/bash

HOSTS=( ws1 ws2 ws3 ws4 ws5 ws6 ws7 ws8 ws9 ws10 ws11 ws12 )

for CURRHOST in ${HOSTS[@]}
do
    ssh -q $CURRHOST "find /logs/$CURRHOST -type f -mtime +7 -exec rm -v {} \;"
done

如果您坚持使用 perl 并希望填充包含具有日志文件的主机的数组,您可以使用:

my @workstation = qw(ws1 ws2 ws3 ws4 ws5 ws6 ws7 ws8 ws9 ws10 ws11 ws12);
my %wscount;

foreach my $workstation (@workstation){
  $logcount = `ssh -q $workstation "ls /logs/$workstation | wc -l"`;
  chomp $logcount;
  if ( $logcount > 0 )
  {
    $wscount{$workstation}=$logcount;
  }
}

foreach my $wswithlog (keys %wscount){
  printf "host $wswithlog: $wscount{$wswithlog}\n";
  `ssh -q $wswithlog "/tools/log_remover /logs/$wswithlog"`
}

相关内容