Ich habe einen Ordner /home/usr/logs/
mit Protokolldateien, die älter als einen Tag sind. Ich möchte alle Protokolldateien, die älter als einen Tag sind, in separate komprimierte Archive (z. B. zip oder tar.gz) komprimieren und sie in den Ordner verschieben /home/usr/logs/archive
.
Die Protokolldateien haben Benennungsformate wie valid.app5s.log.1019
, app5s.gf3sts.1019
, valid.app5s.gf3log.1019
, app5s.gf3log.1019
, app5s.gf1sts.1019
, valid.app5s.gf1log.1019
, app5s.sts.1019
.
Ich habe es folgendermaßen versucht:
find . -mtime +1 -exec zip filename.zip '{}' + && mv filename.zip archive/ \;
Aber diese Dateien sind nicht richtig komprimiert. Kann mir bitte jemand helfen, den Fehler in meinem Code herauszufinden?
Antwort1
logrotate kann dies tun, die Musterübereinstimmung kann für *log sein, dann fügen Sie einen Abschnitt namens „postrotate“ hinzu, betrachten Sie postrotate als ein kleines Bash-Skript, das nach der Rotation ausgeführt wird.
Beispiel;
/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
}
UPDATE1:
wenn Sie Zip statt Gzip verwenden möchten, fügen Sie hinzu:
compresscmd /usr/bin/zip
compressoptions -r
compressext .zip