2003-2009我有几个日常文件。文件的总数是2546,因此缺少日期(文件)。我不想在另一个文件中查找文件以找出丢失的日期? 这些文件的名称如下:
dat_20030129_gf.img # so the date change from file to another
Linux中的任何命令都要执行此操作
答案 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的时区来避免此问题。