如何在文件夹中的数千个文件中查找丢失的文件(日期)?

时间:2015-01-22 17:28:20

标签: linux

2003-2009我有几个日常文件。文件的总数是2546,因此缺少日期(文件)。我不想在另一个文件中查找文件以找出丢失的日期? 这些文件的名称如下:

 dat_20030129_gf.img   # so the date change from file to another

Linux中的任何命令都要执行此操作

2 个答案:

答案 0 :(得分:4)

只需迭代日期范围并检查每个日期的文件是否存在。如果文件丢失,则打印警告。这是Ruby中的一个例子:

#!/usr/bin/env ruby

require 'date'

date = Date.parse('2003-01-01')
last = Date.parse('2010-01-01')
while date < last
  filename = date.strftime("dat_%Y%m%d_gf.img")
  puts "Missing #{filename}" unless File.exist?(filename)
  date += 1
end

答案 1 :(得分:2)

我认为hyat正在为他的问题寻找一个简单的bash解决方案。这应该有效,但它显示了使用bash

处理日期有多尴尬
#!/bin/bash
set -e    # exit the script if something goes wrong
enddate=$(date -u -d "2010-01-01")
date=$(date -u -d "2003-01-01")

while [[ $date != $enddate ]]; do
    filename=$(date -u -d "$date" +"dat_%Y%m%d_gf.img")
    printf "$date "  # watch the progress on the terminal
    if [[ ! -e $filename ]]; then
        echo "$filename not found"
    else
       echo  # print a newline, since printf didn't do it
    fi
    date=$(date -u -d "$date + 1 day")
done

date命令可以使用-d选项生成您想要的任何日期,并且它接受自由格式输入,这就是$date + 1 day工作的原因。我总是将-u传递给date以避免夏令时问题。在最后date命令中添加一天实际上会在我的计算机上增加24小时,但是当切换到DST或从DST切换时,您需要添加23或25小时才能恢复到相同的时钟时间。使用-u进行UTC可以通过使用没有DST的时区来避免此问题。