列出文件名中大于特定时间戳的文件?

列出文件名中大于特定时间戳的文件?

我有一个目录Linux的它有一个日志文件列表,如果某些作业运行,日志文件会自动生成。每个日志文件都会附加时间戳,例如“作业名称_时间戳

更新:

job_2014-05-28_15:05:26.log
job_2014-05-28_15:06:58.log
job_2014-05-28_15:07:02.log
job_2014-05-28_15:07:57.log
job_2014-05-28_15:08:00.log
job_2014-05-28_15:08:01.log
job_2014-05-28_15:08:09.log
job_2014-05-28_15:08:10.log
job_2014-05-28_15:08:11.log
job_2014-05-28_15:08:12.log
job_2014-05-28_15:08:13.log
job_2014-05-28_15:08:14.log
job_2014-05-28_15:08:22.log

job1_2014-05-28_15:08:11.log
job1_2014-05-28_15:08:12.log
job1_2014-05-28_15:08:13.log
job1_2014-05-28_15:08:14.log
job1_2014-05-28_15:08:22.log

我想运行一个 linux 命令来列出大于特定时间戳的所有文件?

对于示例1:我会传递两个参数,如果时间戳给出的是“2014-05-28_15:08:00“ 和职位名称是 ”工作

我应该得到以下列表

job_2014-05-28_15:08:01.log
job_2014-05-28_15:08:09.log
job_2014-05-28_15:08:10.log
job_2014-05-28_15:08:11.log
job_2014-05-28_15:08:12.log
job_2014-05-28_15:08:13.log
job_2014-05-28_15:08:14.log
job_2014-05-28_15:08:22.log

实施例2:我会传递两个参数,如果时间戳给出的是“ 2014-05-28_15:08:11”并且职位名称是 ”工作1

我应该得到以下列表

job1_2014-05-28_15:08:12.log
job1_2014-05-28_15:08:13.log
job1_2014-05-28_15:08:14.log
job1_2014-05-28_15:08:22.log

有什么解决办法吗?

答案1

awk( mawk 1.3.3)的解决方案:

ls | awk -F'[_.]' '{printf "%s_%s\n", $2, $3}' | \
awk ' $0 > "2014-05-28_15:08:00" {print}'

给出:

2014-05-28_15:08:01
2014-05-28_15:08:09
2014-05-28_15:08:10
2014-05-28_15:08:11
2014-05-28_15:08:12
2014-05-28_15:08:13
2014-05-28_15:08:14
2014-05-28_15:08:22

答案2

一个perl办法:

$ perl -nle '
    BEGIN {$t = "2014-05-28_15:08:00"}
    if (/_(.*?)\./) {
        print if $1 gt $t;
    }
' file
job_2014-05-28_15:08:01.log
job_2014-05-28_15:08:09.log
job_2014-05-28_15:08:10.log
job_2014-05-28_15:08:11.log
job_2014-05-28_15:08:12.log
job_2014-05-28_15:08:13.log
job_2014-05-28_15:08:14.log
job_2014-05-28_15:08:22.log

更新

一个简单的perl脚本:

#!/usr/bin/perl

use strict;
use warnings;

my $t = $ARGV[0];
my $l = qr/$ARGV[1]/;

while(<DATA>) {
    if (/${l}_/) {
        if (/_(.*?)\./) {
            print if $1 gt $t;
        }
    }
}

__DATA__
job_2014-05-28_15:05:26.log
job_2014-05-28_15:06:58.log
job_2014-05-28_15:07:02.log
job_2014-05-28_15:07:57.log
job_2014-05-28_15:08:00.log
job_2014-05-28_15:08:01.log
job_2014-05-28_15:08:09.log
job_2014-05-28_15:08:10.log
job_2014-05-28_15:08:11.log
job_2014-05-28_15:08:12.log
job_2014-05-28_15:08:13.log
job_2014-05-28_15:08:14.log
job_2014-05-28_15:08:22.log

答案3

下面的代码有效:

 for i in myjob*; do
           if [[ "myjob_2014-05-28_15:08:00.log" < "$i" ]]; then
                  echo $i
           fi
 done

答案4

您可以-cnewer与查找一起使用:

find /mylogdir -name "job_*" -cnewer /mylogdir/job1_2014-05-28_15:08:00.log

当然,这是查找实际修改过的文件或元数据修改后的文件job1_2014-05-28_15:08:00.log,而不是基于文件名。就你而言,这应该很好。

相关内容