Seite 1 von 1

Backup in die Cloud / Anfänger sucht Unterstützung

Verfasst: Freitag 12. April 2024, 12:31
von dermaxem
Moin,
für eine Überwachung habe ich einen älteren Pi mit einer USB-Cam und Motion im Einsatz.
Motion erzeugt viele JPG-Bilder. Diese haben das Format YYYYMMDDxxxxxx-xx. jpg (20240410213346-01.jpg), kann aber auch angepasst werden.
Der Ordner ist: /var/lib/motion/

Ziel: Backup der vielen einzelnen Datein in ein ZIP und sichern des ZIPS auf ein anderes Laufwerk (Cloud).
Der PI hat Netzanbindung mit Kabel zum Router.
Meine Idee:
Ich erstelle mir ein Script, das manuell oder zeitgesteuert aufgerufen wird.
Das Script soll alle Bilder die älter sind als Heute in ein ZIP verschieben.
Bilder mit Tagesdatum bleiben unberüht bis sie dann morgen drann sind.
Das ZIP soll via einer passende Transportmethode auf ein OneDrive oder Googledrive gebracht werden.
Nach erfolgreichem Transport soll das ZIP gelöscht werden.

Vorgehen:
Startzeit des Scripts festhalten (YYYYMMDD-hhmmss)
Damit das ZIP generieren
(Infos dazu habe ich von: https://hellocoding.de/blog/coding-lang ... -erstellen
Mit "Datum-1tag" die Datein behandeln und in das ZIP verschieben.
ZIP transportieren, wenn Transport erfolgreich, dann löschen.
Bei Transportfehler die Datei ncht löschen.
-
Meine Fragen dazu:
Wie generieren ich aus dem Datum einen Filename für das ZiP?
Wie identifizieren und behandle ich die Files im Ordner, die in das ZIP sollen?
Also erkkenen, welche von heute sind und nicht in das ZIP sollen?
Als Anregung dazu habe ich folgendes gefunden:

Code: Alles auswählen

filenames = [<array der files aus dem ordner>] # wie auch immer das gelesen wird.....
today = datetime.today().replace(hour=0, minute=0, second=0, microsecond=0)

for file in filenames:
    timestring = file[:8]
    date_object = datetime.strptime(timestring, '%Y%m%d')
    if date_object < today:
    # ins zip schieben
-
Als Neuling habe ich aber keine Ahnung, wie ich das umsetze.
Hier würde ich gerne Hilfe zur Selbsthilfe, Beispiele, usw. erhalten, wie ich das machen kann.
Es gibt ja bekanntlich immer mehrere Wege nach Rom.
Freue mich auf Anregungen zu meinem kleinen Projekt.
Danke Euch

Re: Backup in die Cloud / Anfänger sucht Unterstützung

Verfasst: Freitag 12. April 2024, 12:54
von __deets__
Dieses Skript zeigt, wie man aus Dateien mit dem gegebenen Namensschema das Datum extrahiert, und dann basierend auf einem Zeitpunkt aufsammelt.

Code: Alles auswählen

import pathlib
import tempfile
import random
import datetime


def generate_test_data(start_date, path):
    offset = datetime.timedelta(minutes=0)
    for i in range(20, 0, -1):
        d = start_date - offset
        filename = f"{d.strftime('%Y%m%d%H%M%S')}-{i:02}.jpeg"
        offset += datetime.timedelta(minutes=random.randint(10, 100000))
        full_path = path / filename
        full_path.write_text("Ich bin ein Bild")


def collect_files_older_than(cutoff, directory):
    res = []
    for path in directory.rglob("*.jpeg"):
        name = path.name
        creation_date = datetime.datetime.strptime(name.split("-")[0], '%Y%m%d%H%M%S')
        if creation_date < cutoff:
            res.append(path)
    return res


def main():
    today = datetime.datetime.now()
    with tempfile.TemporaryDirectory() as td:
        td = pathlib.Path(td)
        generate_test_data(today, td)

        cutoff = today
        while True:
            files_to_archive = collect_files_older_than(cutoff, td)
            if files_to_archive:
                print(files_to_archive)
            else:
                break
            cutoff -= datetime.timedelta(days=1)


if __name__ == '__main__':
    main()

Re: Backup in die Cloud / Anfänger sucht Unterstützung

Verfasst: Freitag 12. April 2024, 14:17
von dermaxem
Hallo Deets,

danke für das Script. Da passiert auch was, wenn man es startet, aber ich kann damit leider (noch) nichts anfangen ohne Zeile für Zeile zu übersetztten, um zu verstehen, was da genau passiert.
Die Ausgabe sieht so aus:
Output-file

Re: Backup in die Cloud / Anfänger sucht Unterstützung

Verfasst: Freitag 12. April 2024, 14:24
von __deets__
Naja, du musst es halt durcharbeiten. Es erzeugt eine Liste von 20 "kuenstlich gealterten" Dateien, und zeigt dann einfach nur, das man mit collect_files_older_than mit einm Pfad und einem cutoff-Datum alle Dateien bekommt, die aelter sind.