perl - 循环遍历文件行,如果文件不存在则抑制错误

标签 perl shell

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

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

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

但是如果不存在日志文件,我会收到错误: ls: 无法访问...

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

最佳答案

这一切都在 Perl 中完成,包括按上次修改时间戳进行反向排序:

在这个例子中,我也做了它,所以它只对每个文件执行一次“stat”。

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

my @mtimes = map { (stat)[9] } @LS;

my @sorted_indexes = sort { $mtimes[$b] <=> $mtimes[$a] } 0 .. $#mtimes;

foreach my $line ( @LS[ @sorted_indexes ] ) {
    ...
}

关于perl - 循环遍历文件行,如果文件不存在则抑制错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8984741/

相关文章:

linux - 在 rc.local 中通过管道将 echo 传送到 sendmail 失败

linux - 单行退出

perl - 当 WxPerl 类没有方法时怎么办?

perl - 在 Perl 中,如何检查给定函数是从哪个模块导入的?

perl - 如何在 perl 中创建和使用字节数组?

shell - 为什么在 [ x"$VAR"= x"VALUE"] 中使用 'x'?

regex - 使用正则表达式替换字符串中的换行符

perl - 反转从 CGI 脚本中的文件读取的行数组

c++ - 访问没有赋值的 Linux 环境变量

linux - 如何将密码传递给bash脚本