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

How to find missing files(dates) among thousands of files in a folder?

我有几个 2003-2009 年的日常档案。文件总数为 2546,因此缺少日期(文件)。我不想查看另一个人的文件以找出缺少哪些数据? 文件命名如下:

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

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

只需遍历日期范围并检查每个日期的文件是否存在。如果文件丢失,打印警告。这是 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

我认为 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 小时才能回到相同的时钟时间。对 UTC 使用 -u 通过使用没有 DST 的时区可以避免这个问题。