Назад | Перейти на главную страницу

назначение rsync на основе даты файла

У меня есть большой каталог файлов журналов на сервере. Все журналы находятся в одном большом каталоге.

Мы хотели бы сохранить их на другом хосте (наш архивный сервер) и хранить только последние 90 дней резервных копий на «живом» сервере.

однако из-за огромного количества журналов, которые мы создаем с помощью этого приложения, мы создали бы огромную папку, которую было бы трудно просматривать. Возможно ли с помощью RSYNC указать папки назначения на основе даты файла (а не сегодняшней текущей даты) ..

Например..

rsync <options> /logs/*.log ArchiveServer:/archive/ServerA/logs/<YYYY>/<MM>
where application.20111230.log gets dumped to /archive/ServerA/logs/2011/12
and application.20120301.log gets dumped to /archive/ServerA/logs/2012/03

Я мог бы выгрузить их все в общую папку, например / archive / ServerA / Current /, а затем, возможно, еженедельно искать файлы старше 90 дней и затем сортировать их ... но делать это непосредственно в rsync, похоже, было бы намного чище ( и у меня не было бы двух мест для поиска журналов в зависимости от того, насколько он новый)

Что-то вроде этого?

rsync /logs/*.$(date '+%Y%m%d').log ArchiveServer:/archive/ServerA/logs/$(date '+%Y')/$(date '+%m')/

Обновить:

Итак, дата уже указана в имени файла журнала. Я должен был читать медленнее.

Я не думаю, что вы сделали бы это напрямую с помощью rsync, но обернули бы все в сценарий. Если вы хотите добиться успеха с первого раза, что-то вроде:

for daysago in `seq 0 90`
do
  rsync /logs/*.$(date '+%Y%m%d' -d "$daysago days ago").log ArchiveServer:/archive/ServerA/logs/$(date '+%Y' -d "$daysago days ago")/$(date '+%m' -d "$daysago days ago")/
done

Вы можете вставить «echo» перед командой rsync в цикле, чтобы увидеть, хотите ли вы этого.

Что бы вы ни делали, эти элементы будут включены, хотя другие люди будут более умны и элегантны в написании сценариев оболочки, чем я.