Linux如何列出文件名中大于特定时间戳的文件?
我在linux中有一个目录,其中有一个日志文件列表,如果某些作业运行,日志文件将自动生成。每个日志文件都会附加时间戳,如“JobName\u timestamp” 更新:Linux如何列出文件名中大于特定时间戳的文件?,linux,date,unix,datetime,timestamp,Linux,Date,Unix,Datetime,Timestamp,我在linux中有一个目录,其中有一个日志文件列表,如果某些作业运行,日志文件将自动生成。每个日志文件都会附加时间戳,如“JobName\u 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.
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
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
示例2:如果给定的时间戳是“2014-05-28_15:08:11
”,作业名称是“job1,我将传递两个参数
我应该像你一样得到这份名单
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: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
有什么解决办法吗
谢谢。只要比较一下名字就可以了:
ls | sort | awk '{if ($0 > "job_2014-05-28_15:08:00.log") {print}}'
sort
可能不需要,但我把它放在这里是为了确保名称按字母顺序排序
编辑:
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
上述命令不适用于具有不同前缀或后缀的文件名。但如果你能确定1。文件名2中没有空格。日期格式部分是相同的。您可以编写如下代码:
ls | sort \
| sed 's/\(^.*$\)/& &/' \
| sed 's/.*\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}_[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\).* \(.*\)/\1 \2/' \
| awk '{if ($1 > "2014-05-28_15:08:00") {print $2}}'
它看起来很脏,不可能是最好的,但应该管用。您可以根据这个想法编写自己的基础。使用这个简单的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>
而不是pattern1=echo$1 | sed的///'
您将下面的一行放在该位置。job1=`echo $1 | sed -r 's/([^_]+).*/\1/g'`;
pattern1=`echo $1 | sed -r 's/([^_]+_)(.*)_(.*)\..*/\2 \3/g'`
您需要在if语句中添加$job1,而不是$2。是的,这很有效:)。即使工作名称不同,它也会起作用吗?因为我将传递作业名称和时间戳以进行比较nno,所以它不能直接用于具有不同前缀或后缀的文件名。让我们通过编辑这个答案来写更多关于这个问题的内容。你可以在上面的脚本中做一些小的修改。如果我的工作全名是job.27-05-14_18.36.49。那么如何更改上述正则表达式模式?您是否要通过job_2014-05-28_15:08:14.记录此格式并获得相同的结果?
arg1=`echo“$1”| sed-r's/([^ u]+)./\ 1/g'
您将获得该工作并且arg2=`echo“$1”\sed-r's/([^ u]+.]\..*/\2\3/g'`
并在单独的变量中获得时间戳。arg1包含作业名称,arg2包含时间戳。因此,基于此,您必须重新执行上述代码。是的,谢谢,我将检查它。这意味着,在我的日志文件目录中,如果有类似“job.27-05-14_18.36.49.out”的文件格式,您的更新答案应该可以正常工作?让我们来看看。