Skript zur Prozessautomatisierung Tagesaktueller Daten
Mahlzeit,
ich bin zur Zeit dabei einen Prozess zu optimieren, bzw. zu automatisieren. Folgendes ist als Hintergrund eventuell wichtig zu wissen.
Mitarbeiter arbeiten an verschiedenen Ordner, legen dort Dokumente ab oder ändern andere Dokumente, fügen Dateien hinzu, kopieren Daten aus anderen Quellen in diese Ordner, welche auf verschiedene Umsysteme "weitergegeben" werden, teilweise über S-FTP oder VPN.
Aktuell ist dies noch ein händischer Prozess, dass am nächsten Arbeitstag die Daten, welche am Vortag geändert wurden in eine andere Freigabe kopiert werden (bis 9 Uhr morgens) , wo bereits ein Skript läuft, welches danach die Daten in ZIP (mit Datum vom Vortag) packt und an die Umsysteme verteilt und von den Systemen dort automatisch weiterverarbeitet. Die Umsysteme sind in diesem Falle egal.
Dieser manuelle Step ist sehr Fehleranfällig, da es passieren kann, dass am 24.06.2023 ein Ordner/Datei in einen anderen kopiert wird, welcher am 14.06.2010 zuletzt bearbeitet wurde (auch das kommt in der Realität vor, und ist auch korrekt), sodass im Datei-Explorer bei Änderungsdatum der 14.06.2010 für diesen neu hinzugekommenen Ordner steht. Jetzt komme ich als Beispiel, und würde am 25.06.2023 prüfen, welche Daten am Vortag (=24.06.2023) hinzugekommen sind, diese auf die andere Freigabe kopieren und dabei nicht bemerken, dass ein Ordner hinzugekommen ist, welcher zuletzt 2010 geändert wurde. Schlussendlich fehlt dieser Ordner dann in den Umsystemen.
Da das System auf Linux, dachte ich mir baue ich ein simples Bash-Skript. Im Testsystem musste ich dann aber feststellen, so einfach wie ich mir es gedacht habe klappt es nicht. Mein Ansatz war folgender:
Die ZIP-Dateien, sowie die Quelldateien für das ZIP werden regelmäßig automatisiert gelöscht, damit die Freigabe nicht vollgemüllt wird. Denke ich zu kompliziert, ist das mit Bash nicht umsetzbar sondern brauche ich dafür eine andere Programmiersprache?
Ich möchte ja eigentlich nur einmal alles kopieren, dann ZIPPEN zum Einstieg, Logdatei mit allen kopierten Daten inkl. Änderungsdatum. Am nächsten Tag die Logdatei vom Vortag, wenn vorhanden, ansonsten die Initialliste, vergleichen mit einer aktuellen Liste von heute, was geändert oder hinzugekommen ist, dies ebenfalls kopieren und ZIPPEN. Bevor kopiert und gezippt wird, werden die Daten gelöscht vom Vortag, genauso wie das ZIP. Und dies läuft immer so weiter...
Sehr viel Text, ich hoffe man konnte verstehen, was ich versuche, eventuell gibt es auch eine einfachere/elegantere Methode?
VG
ich bin zur Zeit dabei einen Prozess zu optimieren, bzw. zu automatisieren. Folgendes ist als Hintergrund eventuell wichtig zu wissen.
Mitarbeiter arbeiten an verschiedenen Ordner, legen dort Dokumente ab oder ändern andere Dokumente, fügen Dateien hinzu, kopieren Daten aus anderen Quellen in diese Ordner, welche auf verschiedene Umsysteme "weitergegeben" werden, teilweise über S-FTP oder VPN.
Aktuell ist dies noch ein händischer Prozess, dass am nächsten Arbeitstag die Daten, welche am Vortag geändert wurden in eine andere Freigabe kopiert werden (bis 9 Uhr morgens) , wo bereits ein Skript läuft, welches danach die Daten in ZIP (mit Datum vom Vortag) packt und an die Umsysteme verteilt und von den Systemen dort automatisch weiterverarbeitet. Die Umsysteme sind in diesem Falle egal.
Dieser manuelle Step ist sehr Fehleranfällig, da es passieren kann, dass am 24.06.2023 ein Ordner/Datei in einen anderen kopiert wird, welcher am 14.06.2010 zuletzt bearbeitet wurde (auch das kommt in der Realität vor, und ist auch korrekt), sodass im Datei-Explorer bei Änderungsdatum der 14.06.2010 für diesen neu hinzugekommenen Ordner steht. Jetzt komme ich als Beispiel, und würde am 25.06.2023 prüfen, welche Daten am Vortag (=24.06.2023) hinzugekommen sind, diese auf die andere Freigabe kopieren und dabei nicht bemerken, dass ein Ordner hinzugekommen ist, welcher zuletzt 2010 geändert wurde. Schlussendlich fehlt dieser Ordner dann in den Umsystemen.
Da das System auf Linux, dachte ich mir baue ich ein simples Bash-Skript. Im Testsystem musste ich dann aber feststellen, so einfach wie ich mir es gedacht habe klappt es nicht. Mein Ansatz war folgender:
- 1. Initialisierung: Alle Dateien/Ordner inkl. Änderungszeitpunkt in eine CSV-Datei Tabulatorgetrennt schreiben
- 2. Alle Dateien aus dieser CSV-Datei an die Umysteme in einer ZIP komprimieren und verteilen. (Die Systeme können mit doppelten Daten umgehen und diese ignorieren, sorgt aber für Logfile auf deren Seite mit Duplikaten, einmalig aber ignorierbar)
- 3. Skript am 25.06.2023 ausführen, alle Dateien/Ordner inkl. Änderungszeitpunkt in eine CSV-Datei Tabulatorgetrennt schreiben und mit der Liste vom Vortag (oder wenn vom Vortag keine Liste vorhanden, mit der Initialliste aus Step1) vergleichen, prüfen welche Ordner/Dateien in dem letzten ZIP nicht vorhanden waren oder geändert wurden und ein ZIP mit Datum vom 24.06.2023 packt.
Die ZIP-Dateien, sowie die Quelldateien für das ZIP werden regelmäßig automatisiert gelöscht, damit die Freigabe nicht vollgemüllt wird. Denke ich zu kompliziert, ist das mit Bash nicht umsetzbar sondern brauche ich dafür eine andere Programmiersprache?
Ich möchte ja eigentlich nur einmal alles kopieren, dann ZIPPEN zum Einstieg, Logdatei mit allen kopierten Daten inkl. Änderungsdatum. Am nächsten Tag die Logdatei vom Vortag, wenn vorhanden, ansonsten die Initialliste, vergleichen mit einer aktuellen Liste von heute, was geändert oder hinzugekommen ist, dies ebenfalls kopieren und ZIPPEN. Bevor kopiert und gezippt wird, werden die Daten gelöscht vom Vortag, genauso wie das ZIP. Und dies läuft immer so weiter...
Sehr viel Text, ich hoffe man konnte verstehen, was ich versuche, eventuell gibt es auch eine einfachere/elegantere Methode?
VG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 7644973860
Url: https://administrator.de/contentid/7644973860
Ausgedruckt am: 18.11.2024 um 17:11 Uhr
2 Kommentare
Neuester Kommentar
Hi
also ich steige durch dein geschreibsel nicht durch.
Dateiänderungen in einem Ordner lassen sich per inotify unter Linux tracken. Dann musst du da schon mal nichts vergleichen. Mach damit eine Logdatei die Buch führt welche Daten geändert wurden. Anhand dieser kannst du dann deine Dateien rumkopieren.
Was du da sonst vor hast verstehe ich leider nicht
also ich steige durch dein geschreibsel nicht durch.
Dateiänderungen in einem Ordner lassen sich per inotify unter Linux tracken. Dann musst du da schon mal nichts vergleichen. Mach damit eine Logdatei die Buch führt welche Daten geändert wurden. Anhand dieser kannst du dann deine Dateien rumkopieren.
Was du da sonst vor hast verstehe ich leider nicht
Dafür reicht ein Rsync mit Hardlinks auf die Quelle und der Option --compare-dest=DIR
https://wiki.ubuntuusers.de/rsync/
Und jedes Backup das inkrementelle Sicherungen machen kann.
https://wiki.ubuntuusers.de/rsync/
Und jedes Backup das inkrementelle Sicherungen machen kann.