Wie erstelle tar-Dateien älter als 7 Tage mit linux shell scripting
Ich Schreibe shell-Skript, um backup-Dateien älter als 7 Tage sind. Hier ist mein code. Aber ich bin nicht immer das erwartete Ergebnis. Kann jemand mich korrigieren?
#!/bin/bash
# Backup files
files=($(find /var/log/ -mtime +"7"))
for files in ${files[*]}
do
echo $files
tar cvfz backup.tar.gz $files
done
InformationsquelleAutor Palanikumar | 2015-01-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies funktionieren wird:
Beachten Sie die Verwendung von
"${files[@]}"
im Gegensatz zu${files[*]}
."${files[@]}"
zu erweitern bietentar
mit einem argument pro file-name und wird funktionieren, auch wenn die Dateinamen enthalten Leerzeichen, Tabulatoren oder Zeilenumbrüche. Dagegen, nach der shell expandiert${files[*]}
ist, wird word-splitting, potenziell mangeln Ihre Datei-Namen.Für eine detaillierte Erklärung der Schleife zum erzeugen der
files
array, siehe: Wie kann ich store-Befehl Ergebnis als arrays in BashAlle Dateien und Verzeichnisse erzeugt, indem der Befehl
find /var/log/-mtime +7
werden in dertar
- Datei. Nur Dateien, keine Verzeichnisse, siehe Skynet Antwort.Um Protokolle zu archivieren, aus die sieben letzten Tage
Nur ein Zeichen ändern müssen:
Dies funktioniert, weil
find
interpretiert numerische Argumente wie folgt:So
-mtime +7
bedeutet mehr als 7 Tage alt sind, während-mtime -7
bedeutet weniger als 7. Beachten Sie, dassfind
ignorieren gebrochene Teile. So+7
gehören 8 Tage alt, aber nicht 7,5 Tage alt. Sehenman find
für details.nur jetzt bemerkt seine Schleife kontinuierlich. Iteration ist nicht immer gestoppt. Mache ich etwas falsch hier?
Meine version hat keine Schleifen und keine Iterationen, nur zwei Befehle. Definiert man die Datei-Liste und der andere Teere Dateien. Also, bitte sagen Sie mir, was Sie sehen. Wenn Sie unsicher sind, was geschieht, setzen
set -x
am Anfang des Skripts.Wenn Sie immer noch Fehlermeldungen, versuchen Sie, ändern der IFS: # speichern und IFS ALTIFS=$IFS IFS=$'\n' # lese alle Dateinamen in ein array fileArray=($(find $DIR -type f)) # wiederherstellen IFS=$ALTIFS die Lösung Gefunden auf cyberciti.biz/tips/handling-filenames-with-spaces-in-bash.html
InformationsquelleAutor John1024
Ersetzen Sie Ihre
find
- Befehl mit diesem Befehl und versuchen Sie es erneut,in den letzten 7 Tagen in einer zip-Datei: `` find /yourpath/ -type f -mtime -7 -print | Reißverschluss dump.zip -@ ``
InformationsquelleAutor Skynet