특정 타임스탬프보다 큰 파일 이름을 가진 파일을 나열하시겠습니까?

특정 타임스탬프보다 큰 파일 이름을 가진 파일을 나열하시겠습니까?

디렉토리가 있습니다리눅스특정 작업이 실행되면 자동으로 생성되는 로그 파일 목록이 있습니다. 각 로그 파일에는 "와 같은 타임스탬프가 추가됩니다.작업 이름_타임스탬프"

고쳐 쓰다:

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

-cnewerfind와 함께 사용할 수 있습니다 .

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

물론 이는 job1_2014-05-28_15:08:00.log파일 이름을 기준으로 하는 것이 아니라 실제 수정된 파일이나 메타데이터 수정된 파일을 찾는 것입니다. 당신이 걱정하는 한, 이것은 괜찮을 것입니다.

관련 정보