scanlin
Anmeldungsdatum: 30. April 2014
Beiträge: 50
|
Hallo liebes Forum,
meine Backup Software erstellt jeden Tag ein automatsiches Backup in einer vorgegebenen Struktur (siehe Skizze). Die Backups werden dabei einfach tagesweise durchnummeriert 2018-11-11 2018-11-12 usw.... Wenn das Backup erfolgreich war, werden in dem Tagesordner drei Dateien erstellt (summary, log, index) und der Ordner "tree" der die gesicherten Dateien enthält.
Wenn das Backup nicht erfolgreich war (bspw. Client ist offline), wird im Tagesordner eine rsync_error erstellt. Zudem ist der Ordner "tree" leer weil keine Daten gesichert werden konnten. Was ich nun möchte ist, die Tagesordner automatisiert zu löschen, bei denen das Backup nicht erfolgreich war. Ich hab bereits versucht mit "find" entweder nach Ordnern zu suchen die sehr klein sind <1MB oder aber nach der rsync_error zu suchen und dann den Tagesordner zu löschen. Aber ich bekomm´s leider nicht gebacken ☹ Entweder wird nichts gefunden oder aber nur die rsync_error gelöscht. Hat jemand eine Idee, wie das per Befehl oder Script klappen könnte? Danke im Voraus
Grüße scanlin
- Bilder
|
Thomas_Do
Moderator
Anmeldungsdatum: 24. November 2009
Beiträge: 8528
|
| cd Client1-home
rm -rf $(find . -name rsync_error.txt -execdir pwd \;)
|
Ohne Gewähr! Automatische Löschbefehle sind gefährlich.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
Thomas_Do schrieb: | cd Client1-home
rm -rf $(find . -name rsync_error.txt -execdir pwd \;)
|
Ohne Gewähr! Automatische Löschbefehle sind gefährlich.
Das ist vor allem nicht robust bei Sonderzeichen in Dateinamen! Außerdem passt der Dateiname nicht. Lieber so | find -depth -type f -name rsync_error -printf '%h\0' | xargs -r0 echo rm -rf
|
Das echo ist nur zum Testen drin.
|
Thomas_Do
Moderator
Anmeldungsdatum: 24. November 2009
Beiträge: 8528
|
rklm schrieb: Außerdem passt der Dateiname nicht.
Sonderzeichen d'accord. Aber was ist mit dem Dateinamen?
|
cosinus
Anmeldungsdatum: 11. Mai 2010
Beiträge: 1374
Wohnort: HB
|
Kann man den leeren Tagesordner nicht einfach so ohne Abfrage mit rm -r automatisiert löschen? rm -r würde sofort meckern und sagen, dass der nicht gelöscht werden kann, wenn er weitere Elemente enthält.
|
Thomas_Do
Moderator
Anmeldungsdatum: 24. November 2009
Beiträge: 8528
|
cosinus schrieb: Kann man den leeren Tagesordner nicht einfach so ohne Abfrage mit rm -r automatisiert löschen?
Wenn ich das richtig verstanden habe, ist der Ordner nicht leer.
|
scanlin
(Themenstarter)
Anmeldungsdatum: 30. April 2014
Beiträge: 50
|
Die Lösung von rklm funktioniert super 👍 find -depth -type f -name rsync_error -printf '%h\0' | xargs -r0 echo rm -rf Vielen lieben Dank dafür. Ich wäre da nie drauf gekommen 😳 Viele Grüße scanlin
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
Thomas_Do schrieb: rklm schrieb: Außerdem passt der Dateiname nicht.
Sonderzeichen d'accord. Aber was ist mit dem Dateinamen?
Vergiss es: ich kann nicht lesen. 😳 cosinus schrieb: Kann man den leeren Tagesordner nicht einfach so ohne Abfrage mit rm -r automatisiert löschen?
Das löscht dann alle Ordner - oder nicht.
rm -r würde sofort meckern und sagen, dass der nicht gelöscht werden kann, wenn er weitere Elemente enthält.
Der Ordner enthält ja eine Datei, nämlich rsync_error . Das ist also kein Unterscheidungskriterium. Man muss schon nach der speziellen Fehlerdatei suchen. Wenn ich so drüber nachsinne, ginge auch so etwas: | for f in /pfad/*/rsync_error; do
test -f "$f" && rm -rf "$(dirname "$f")"
done
|
In der bash geht sogar | shopt -s nullglob
for f in /pfad/*/rsync_error; do
rm -rf "$(dirname "$f")"
done
|
Obwohl ich die Version für die sh deshalb schöner finde, weil sie außerdem sicherstellt, dass rsync_error eine Datei ist (und nicht etwa ein Ordner oder etwas ganz anderes).
|
cosinus
Anmeldungsdatum: 11. Mai 2010
Beiträge: 1374
Wohnort: HB
|
Ok dann geht das nicht, ich hab das verstanden, dass der Ordner wenn er denn weg soll, komplett leer ist. 😳
|
scanlin
(Themenstarter)
Anmeldungsdatum: 30. April 2014
Beiträge: 50
|
Hat den die Schleife gegenüber der Lösung mit find irgendwelche Vorteile? Ich hab´s bei mir nun so gelöst, dass nach dem Backup ein Script mit dem genannten find Befehl ausgeführt wird. Falls das Backup nicht gemacht werden konnte, wird der Tagesordner mit der darin enthaltenen rsync_error gelöscht. Ich werd das noch ne Weile kontrollieren aber im Moment läufts wie gewünscht ☺ Grüße scanlin
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
scanlin schrieb: Hat den die Schleife gegenüber der Lösung mit find irgendwelche Vorteile?
Wenn Deine Verzeichnisbäume tiefer sind und alle Backup-Ordner auf der selben Ebene liegen, ist der Ansatz mit der Schleife effizienter als der mit find , weil die Verzeichnisbäume nicht in der gesamten Tiefe durchlaufen werden müssen. Man kann das bei find aber noch verbessern, indem man eine Begrenzung der Suchtiefe einfügt. | find /wo/alle/backups/liegen -depth -maxdepth 2 -type f -name rsync_error -printf '%h\0' | xargs -r0 echo rm -rf
|
Ich hab´s bei mir nun so gelöst, dass nach dem Backup ein Script mit dem genannten find Befehl ausgeführt wird. Falls das Backup nicht gemacht werden konnte, wird der Tagesordner mit der darin enthaltenen rsync_error gelöscht. Ich werd das noch ne Weile kontrollieren aber im Moment läufts wie gewünscht ☺
👍
|
cosinus
Anmeldungsdatum: 11. Mai 2010
Beiträge: 1374
Wohnort: HB
|
scanlin schrieb: Wenn das Backup nicht erfolgreich war (bspw. Client ist offline),
Wieso wird überhaupt versucht ein backup zu schreiben, wenn der zu sichernde System offline ist? Kann man den server einfach nicht anweisen, diesen Rechner komplett zu überspringen wenn er nicht erreichbar sein sollte?
Wir haben das so geregelt, dass keine Daten von Clients gesichert werden, wir sichern nur die produktiven Server und die Kollegen haben allesamt die Anweisung, Daten nur auf den Netzlaufwerken abzulegen.
|
scanlin
(Themenstarter)
Anmeldungsdatum: 30. April 2014
Beiträge: 50
|
Dirvish führt stur einmal am Tag ein Backup durch. Dabei wird alles gesichert was in der Konfigdatei angegeben ist, Dirvish prüft nicht ob der Client online ist oder nicht. Es wäre natürlich sinnvoller erst zu prüfen und dann zu sichern ☺ @rklm, vielen Dank für Deine Erklärung. Ich werd beide Varianten noch mal abtesten. 👍 Grüße scanlin
|