我在文件名中有一堆带有时间戳的文件:
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脚本是否可以这样做?
答案 0 :(得分:0)
您希望脚本实时运行吗?
如果是,那么也许您应该考虑以下内容:
答案 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;
这将显示START
和FINISH
之间丢失的文件,包括两者。您只需要定义START
和FINSH
个文件。您可以修改脚本,以便将这些值作为参数提供。
答案 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
否则,对于更强大的解决方案,您必须进行一些日历计算以包含闰年等。