我有一个目录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
,而不是基于文件名。就你而言,这应该很好。