Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 循环文件行,如果文件不存在,则抑制错误_Perl_Shell - Fatal编程技术网

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

我在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/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 ) {
  ...
}