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

use*_*829 3 shell perl

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

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

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

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

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

zgp*_*max 7

在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 ] ) {
    ...
}
Run Code Online (Sandbox Code Playgroud)


Tot*_*oto 6

改为使用glob函数:

my @LS = glob('/logs/log.csv.*');
Run Code Online (Sandbox Code Playgroud)


Ili*_*ion 6

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

my @LS  = `ls -1t /logs/log.csv.* 2>/dev/null`;
Run Code Online (Sandbox Code Playgroud)