我在 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_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
以下命令(可以轻松编写脚本)将为您完成此操作:
for i in $(ls *); do
if [[ "job_2014-05-28_15:08:00.log" < "$i" ]]; then
echo $i
fi
done
编辑:
假设你只想对名为我的工作,然后修改上述内容如下:
for i in $(ls myjob*); do
if [[ "myjob_2014-05-28_15:08:00.log" < "$i" ]]; then
echo $i
fi
done
答案2
简单查找命令:
find . -maxdepth 1 -type f -name job1_\* -newer job1_2014-05-28_15:08:11.log
此示例中有 2 个假设:
- 日志文件的修改时间与文件名中的时间戳相关
- 您可以提供特定的文件名,该文件名是所有所需日志文件的下限