检查每分钟是否有文件

时间:2015-09-09 18:39:08

标签: bash

我在文件名中有一堆带有时间戳的文件:
    public class Equals { public void method(){ equals(""); } @Override public boolean equals(Object other) { System.out.println("I am being compared to '"+other+"'"); return super.equals(other); } }     String path = "C:\\test\\text.txt"; File f = new File(path); f.getParentFile().mkdirs(); try { f.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }     A_2015-01-01_00-01     A_2015-01-01_00-02

文件夹已满2个月的文件,每分钟一个文件,我想知道是否有一种快速方法可以检查是否缺少时间戳,而不使用例如包含所有时间戳的字典并运行比较。 因此,如果缺少一分钟的条目,所以跳过这一分钟,我会得到两个文件,包括缺少的分钟或时间范围。 我是一般的编码新手,并且想知道使用bash脚本是否可以这样做?

4 个答案:

答案 0 :(得分:0)

您希望脚本实时运行吗?

如果是,那么也许您应该考虑以下内容:

  • 监控您的文件夹中的新文件(使用inotifywait
  • 对于每个新文件,检查文件是否存在,名称为-1分钟

答案 1 :(得分:0)

您提供了一些不同格式的示例。假设实际格式为A_2015-01-01_00:04,这可能会有所帮助:

#!/bin/bash

START="A_2015-01-01_00:01";
FINISH="A_2015-01-01_00:08";

NEXT_FILE="$START";
[ -f $NEXT_FILE ] || echo "$NEXT_FILE";

while [ "$NEXT_FILE" != "$FINISH" ];do
        TS=$(echo $NEXT_FILE | cut -d "_" -f2- | tr "_" " ");
        NEXT_MIN=$(date -d "$TS 1 minute" "+%Y-%m-%d_%H:%M");
        NEXT_FILE="A_$NEXT_MIN";
        [ -f $NEXT_FILE ] || echo "$NEXT_FILE";
done;

现在,使用格式A_2015-01-01_00-04

#!/bin/bash

START="A_2015-01-01_00-01";
FINISH="A_2015-01-01_00-08";

NEXT_FILE="$START";
[ -f $NEXT_FILE ] || echo "$NEXT_FILE";

while [ "$NEXT_FILE" != "$FINISH" ];do
        TS=$(echo "$NEXT_FILE" | cut -d "_" -f2-);
        DAY=$(echo "$TS" | cut -d "_" -f1);
        TIME=$(echo "$TS" | cut -d "_" -f2 | tr "-" ":");

        NEXT_MIN=$(date -d "$DAY $TIME 1 minute" "+%Y-%m-%d_%H-%M");
        NEXT_FILE="A_$NEXT_MIN";

        [ -f $NEXT_FILE ] || echo "$NEXT_FILE";
done;

这将显示STARTFINISH之间丢失的文件,包括两者。您只需要定义STARTFINSH个文件。您可以修改脚本,以便将这些值作为参数提供。

答案 2 :(得分:0)

您可以计算在哪个小时内没有60个文件。 完全按照问题中的说明构建文件名时,您可以使用:

ls A_* | cut -d"-" -f1-3 | sort | uniq -c | grep -v " 60 "

答案 3 :(得分:0)

要求救援!

以下简单脚本无法识别日期更改,但会为您提供跳过的会议记录

$ ls -1 | awk -F- 'p+1!=$NF{print p0, $0} {p=$NF;p0=$0}'
A_2015-01-01_00-04 A_2015-01-01_00-06
A_2015-01-01_00-08 A_2015-01-01_00-10

目录包含这些文件

$ ls -1
A_2015-01-01_00-01
A_2015-01-01_00-02
A_2015-01-01_00-03
A_2015-01-01_00-04
A_2015-01-01_00-06
A_2015-01-01_00-07
A_2015-01-01_00-08
A_2015-01-01_00-10

否则,对于更强大的解决方案,您必须进行一些日历计算以包含闰年等。