Вопрос: Файлы tar в Linux в пределах определенного диапазона дат, используя дату имени файла


У меня есть файлы, имена которых начинаются с YYYYMMDD следующим образом:

20160221_143223_Report.csv
20160222_121223_Report.csv
           ...
20160229_141223_Report.csv
20160301_171223_Report.csv

Я хочу файлы tar, у которых есть «Отчет» в имени файла и имена которых соответствуют диапазону 1-8 дней назад. Например: сегодня 1 марта, поэтому я хочу файлы tar с 22 февраля по 29 февраля (сегодня не включительно).

files=($(ls |<HAS "Report" in filename> and  <WITHIN `date -d "8 days ago" '+%Y%m%d'> )) #output will be filenames that has the word "Report" and  from 22th to 29th FEB
tar cvfz oldfile.tar.gz "${files[@]}"

Какова модель, с которой я должен соответствовать?


1
2018-03-01 04:05


Источник


Вы прочитали справочную страницу для tar? Он имеет более новый вариант ... find тоже, плюс регулярное выражение и! - Xen2050
Дана ли дата изменения файла в соответствии с датой в имени файла? - Paul
@Paul Да, это одно и то же - hades


Ответы:


find вероятно, лучший вариант, если вы хотите запустить его самостоятельно:

find . -name '*Report.csv' -mtime +8 | xargs  tar -czvf  oldfile.tar.gz

Существует также довольно стандартный инструмент для очистки старых файлов, называемых logrotate который может соответствовать шаблону в папке и делать различные tidyups, включая сжатие старых файлов и удаление историков.


1
2018-03-01 05:50