我在linux中有一个目录,其中包含日志文件列表,如果运行某些作业,日志文件会自动生成。每个日志文件都附加时间戳,例如“ JobName_TimeStamp ”
更新:
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 ”
我应该得到清单
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
”,作业名称为“ job1 ”
我应该得到清单
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
有什么办法吗?
谢谢。
使用此简单的bash脚本并获取输出
#!/bin/bash
pattern1=`echo $1 | sed 's/_/ /'`;
pattern2=`date -d "$pattern1" "+%s"`
for file in `ls *.log`
do
job=`echo "$file" | sed -r 's/([^_]+).*/\1/g'`
time=`echo "$file" | sed -r 's/([^_]+_)(.*)_(.*)\..*/\2 \3/g'`
pattern3=`date -d "$time" "+%s"`
if [ $2 == $job ] && [ $pattern3 -gt $pattern2 ] ; then
echo "$file"
fi
done
您必须运行此方法
$bash script_file.sh <timestamp> <job>
喜欢
$bash script_file.sh 2014-05-28_15:08:00 job
代替pattern1 =echo $1 | sed 's/_/ /'
您将以下行放在该位置。
job1=`echo $1 | sed -r 's/([^_]+).*/\1/g'`;
pattern1=`echo $1 | sed -r 's/([^_]+_)(.*)_(.*)\..*/\2 \3/g'`
并且需要在$ job1上放置if语句,而不是$ 2。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句