디렉토리가 있습니다리눅스특정 작업이 실행되면 자동으로 생성되는 로그 파일 목록이 있습니다. 각 로그 파일에는 "와 같은 타임스탬프가 추가됩니다.작업 이름_타임스탬프"
고쳐 쓰다:
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와 함께 사용할 수 있습니다 .
find /mylogdir -name "job_*" -cnewer /mylogdir/job1_2014-05-28_15:08:00.log
물론 이는 job1_2014-05-28_15:08:00.log
파일 이름을 기준으로 하는 것이 아니라 실제 수정된 파일이나 메타데이터 수정된 파일을 찾는 것입니다. 당신이 걱정하는 한, 이것은 괜찮을 것입니다.