2015-01-22 3 views
0

У меня есть несколько ежедневных файлов за 2003-2009 годы. общее количество файлов - 2546, поэтому отсутствуют даты (файлы). Я не хочу смотреть в файл другим, чтобы узнать, какие даты отсутствуют. файлы называются так:Как найти отсутствующие файлы (даты) среди тысяч файлов в папке?

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

любая команда в Linux для выполнения этого, пожалуйста,

+1

Только на SO 2546 эквивалентно «нескольким» ... – twalberg

ответ

3

Просто итерацию по диапазону дат и проверить, существует ли файл на каждую дату. Распечатайте предупреждение, если файл отсутствует. Вот пример в 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

Я думаю, что 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 вам нужно добавить 23 или 25 часов, чтобы вернуться к тем же часам. Использование -u для UTC позволяет избежать этой проблемы с помощью часового пояса, который не имеет DST.

Смежные вопросы