循环遍历文件行,如果文件不存在则禁止错误

时间:2012-01-24 09:51:35

标签: perl shell

我在shell Perl脚本中有以下内容:

my @LS  = `ls -1t /logs/log.csv.*`;
foreach my $line (@LS) {

如果实际存在一个或多个log.csv。*文件,则可以正常工作。

但如果没有日志文件,我会收到错误: ls:无法访问...

我可以以某种方式抑制此警告,因为shell脚本是一个cron脚本,如果没有文件就可以了吗?

3 个答案:

答案 0 :(得分:6)

改为使用glob功能:

my @LS = glob('/logs/log.csv.*');

答案 1 :(得分:6)

您希望将错误输出重定向到/ dev / null:

my @LS  = `ls -1t /logs/log.csv.* 2>/dev/null`;

答案 2 :(得分:0)

如果您不关心订单,只需使用[glob] [glob]。

my @LS = glob('/logs/log.csv.*');

如果您需要按照问题中的命令修改时间对其进行排序,则可以使用Schwartzian transform

my @LS = map{
    $_->[0]
  } sort{
    $a->[1] <=> $b->[1]
  } map{
    [$_, (stat)[9] ] # mtime
  } glob('/logs/log.csv.*');

for my $line ( @LS ) {
  ...
}