У меня есть папка /home/usr/logs/
, содержащая файлы журналов старше 1 дня. Я хочу сжать все файлы журналов старше одного дня в отдельные сжатые архивы (например, zip или tar.gz) и переместить их в папку /home/usr/logs/archive
.
Файлы журналов имеют такие форматы имен, как valid.app5s.log.1019
, app5s.gf3sts.1019
, valid.app5s.gf3log.1019
, app5s.gf3log.1019
, app5s.gf1sts.1019
, valid.app5s.gf1log.1019
, app5s.sts.1019
.
Я попробовал так:
find . -mtime +1 -exec zip filename.zip '{}' + && mv filename.zip archive/ \;
Но эти файлы не заархивированы должным образом. Кто-нибудь, пожалуйста, поможет мне разобраться с ошибкой в моем коде?
решение1
logrotate может это сделать, сопоставление с образцом может быть для *log, затем вы добавляете раздел с именем «postrotate», рассматривая postrotate как небольшой bash-скрипт, который запускается после ротации.
пример;
/home/usr/logs/*.log {
daily
missingok
compress
#delaycompress (this will prevent compressing of one day)
notifempty
create 640 root adm
sharedscripts
postrotate
mv /home/usr/logs/*.gz /home/usr/logs/archive/;
endscript
}
ОБНОВЛЕНИЕ1:
если вы хотите использовать zip вместо gzip, добавьте;
compresscmd /usr/bin/zip
compressoptions -r
compressext .zip