Perl 循环文件行,如果文件不存在,则抑制错误
我在shell Perl脚本中有以下内容:Perl 循环文件行,如果文件不存在,则抑制错误,perl,shell,Perl,Shell,我在shell Perl脚本中有以下内容: my @LS = `ls -1t /logs/log.csv.*`; foreach my $line (@LS) { 如果实际存在一个或多个log.csv.*文件,则此操作非常有效 但如果不存在日志文件,则会出现错误: ls:无法访问 由于shell脚本是一个cron脚本,如果没有文件就可以了,我是否可以以某种方式抑制此警告?请改用此函数: my @LS = glob('/logs/log.csv.*'); 您想将错误输出重定向到/dev/nu
my @LS = `ls -1t /logs/log.csv.*`;
foreach my $line (@LS) {
如果实际存在一个或多个log.csv.*文件,则此操作非常有效
但如果不存在日志文件,则会出现错误:
ls:无法访问
由于shell脚本是一个cron脚本,如果没有文件就可以了,我是否可以以某种方式抑制此警告?请改用此函数:
my @LS = glob('/logs/log.csv.*');
您想将错误输出重定向到/dev/null:
my @LS = `ls -1t /logs/log.csv.* 2>/dev/null`;
使用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 ] ) {
...
}
my@LS=glob('/logs/log.csv.*');
my@mtimes=map{(stat)[9]}@LS;
my@sorted_index=sort{$mtimes[$b]$mtimes[$a]}0$#时间;
foreach my$行(@LS[@sorted_index]){
...
}
如果您不关心订单,只需使用[glob
][glob]
my @LS = glob('/logs/log.csv.*');
如果您需要像问题中的命令一样按修改的时间对其进行排序,您可以使用
my@LS=map{
$_->[0]
}分类{
$a->[1]$b->[1]
}地图{
[$(统计)[9].\mtime
}glob('/logs/log.csv.*');
对于我的$line(@LS){
...
}
如果他使用的是标准的日志文件,可能工作得很好,但我注意到他包含了-t标志,用于根据修改时间进行排序,这可能会导致一些问题,具体取决于他试图完成的任务。尽管如此,还是投票支持将其保留在perl中!
my @LS = map{
$_->[0]
} sort{
$a->[1] <=> $b->[1]
} map{
[$_, (stat)[9] ] # mtime
} glob('/logs/log.csv.*');
for my $line ( @LS ) {
...
}