2016-08-03 13 views
-1

Ich habe eine Liste der Protokolldateien in einem Verzeichnis, die seit mehr als einem Jahr angehäuft sind. Ich habe das folgende Skript geschrieben, um die Protokolldateien zu archivieren, die älter als 15 Tage sind.Unix-Skript-Archiv Protokolldateien älter als 15 Tage

Script:

#!/bin/bash 
files=($(find /opt/Informatica/9.5.1/server/infa_shared/SessLogs -type f -mtime +15)) 
file=SessLog_bkup_`date +"%y-%m-%d"`.tar.gz 
Backup=/opt/Informatica/9.5.1/server/infa_shared/SessLogs/Backup 
tar -zcf $file --remove-files "${files[@]}" 
mv $file $Backup 

Aber, wenn ich das Skript es unter Fehler wirft

Fehler:

./backuplogs.sh: line 5: /bin/tar: Argument list too long.

Bitte informieren Sie, wenn ich Ich vermisse dich etwas im Skript ing

Dank für die Hilfe Kiran

+3

Die Standardlösung dafür ist ['logrotate'] (https://github.com/logrotate/logrotate) – hek2mgl

Antwort

0

Ihre Fehlermeldung ist wegen des Ausfalls von execve(2) von /bin/tar von Shell mit E2BIG.

Lesen Sie die Manpage von tar(1). Sie könnten

-T , --files-from =FILE

Get names to extract or create from FILE.

nutzen und kombinieren, dass mit einigen anderen Teilen des Skripts (z Umleiten der find Befehlsausgabe in eine temporären Datei, die von -T-tar weitergegeben werden ....).

Aber wie kommentiert von hek2mgl Sie wirklich wollen, logrotate(8)

Sie auch andere Entpacker verwenden könnte, zum Beispiel afio(1)

Verwandte Themen