Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux如何列出文件名中大于特定时间戳的文件?_Linux_Date_Unix_Datetime_Timestamp - Fatal编程技术网

Linux如何列出文件名中大于特定时间戳的文件?

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.

我在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.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”的文件格式,您的更新答案应该可以正常工作?让我们来看看。