如何在文件夹中的数千个文件中查找丢失的文件(日期)?
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 的时区可以避免这个问题。
我有几个 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 的时区可以避免这个问题。