У меня есть папка, полная файлов, где мне время от времени нужно копировать часть их в другое место для обработки.
Файлы имеют дату, когда они были созданы в имени файла, то есть filename_20131028.txt.
Как мне выбрать и скопировать файлы между двумя датами? В идеале я хотел бы создать скрипт типа get_my_foo_files.sh 20131010 20131025 и получать файлы в период с 10 по 25 октября.
Заранее спасибо.
Изменить : я открыт для решений в Python / Perl, а также.
Ответы:
Используя GNU,
date
вы можете легко проходить по диапазону дат в формате ГГГГММДД:Добавьте свою обработку вместо
echo ...
. При этом используется арифметика даты , где «n день» - это добавление дней к заданной дате, «-n день» также работает для вычитания (хотя следите за этим beartrap, если также присутствует HH: MM).(В случае, если вы когда-либо сталкивались с этим, в древних
date
( эпоха sh-utils ) версиях была предусмотренаmktime()
функция нормализации, вы можете просто увеличивать число дней до 99, и это молча исправит это для вас:)
Нечто подобное (но , возможно , не идентичны в поведении) также может быть сделано с файловой системой меток времени с использованием GNU
find
и связанные с ним время изменения параметров (-mtime
,-daystart
и многое другое).Возможно, полезным вариантом будет использование расширенного сглаживания bash (через
@(pattern)
), чтобы вы могли обрабатывать все файлы за один раз:Это также устанавливает
nullglob
так, чтобы нулевое совпадение приводило к пустой строке, а не к ошибке. Это полезно, когда лучше выполнить одну операцию над несколькими файлами (например,tar
илиrsync
).источник