Suche Add-On / Integration welches Dateien nach n-Tagen löscht oder umkopiert.

HaUsr23

Member
Da ich meine Kamera Bilder nun erfolgreich auf einer zusätzlichen Platte speichere möchte ich die Dateien, in unterschiedlichen Ordner gerne nur eine bestimmte Anzahl an Tagen aufbewahren und dann löschen oder ggf. verschieben.
Gibt es ein Add-On oder eine Integration die soetwas in Home Assistant machen kann ?
 
Moin,

keine Ahnung, ob es da etwas HA-spezifisches gibt, aber mit einem einfachen Bash-Script und dem Befehl "find" sollte sich sowas auch realisieren lassen.

Halt irgendwas in diese Richtung:

find /Pfad/zu/den/Dateien/ -name "<Platzhalter-Bildname>" -mtime +14 -delete

Ich würde aber vorher testen, bevor man sowas losrattern lässt.... Mittels "find" kannst Du halt suchen und auch eine Löschung vornehmen lassen. Als Trockenlauf würde es sich eher anbieten, dass man das "-delete" erstmal aussen vor lässt.

Alles nachfolgende findet im HomeAssistant-Terminal statt!

Vielleicht erstellst Du Dir auch erstmal ein paar Testdateien mit "touch". Zunächst mal einen Test-Ordner erstellen: mkdir /root/config/www/date-test und dann in diesen wechseln: cd /root/config/www/date-test. Unter Debian z.B. sind da ein paar Test-Dateien recht flott erstellt:

Bash:
touch -d "1 year ago" 1y.txt
touch -d "3 months ago" 3m.txt
touch -d "2 months ago" 2m.txt
touch -d "1 month ago" 1m.txt
touch -d "14 days ago" 14d.txt
touch -d "7 days ago" 7d.txt
touch -d "3 days ago" 3d.txt
touch -d "1 day ago" 1d.txt

Hab das grade mal unter HA getestet... funktioniert natürlich nicht. Im folgenden Format funktioniert es allerdings: "touch -t <YYYYMMDDHHSS> <Dateiname>", also z.B.:

touch -t 202412241800 frohe_weihnachten.txt oder touch -t 202501010000 frohes_neues.txt

Weisst schon... 😄 Das ganze natürlich in Einheiten, welche für Dich zum testen auch Sinn machen (wie z.B. die o.g. Beispiele). Mitunter auch einfach mit entsprechend klaren Dateinamen:

Bash:
touch -t 202505160000 20250516.txt
touch -t 202505130000 20250513.txt
touch -t 202505090000 20250509.txt
touch -t 202505020000 20250502.txt
touch -t 202504160000 20250416.txt

Und so weiter... halt so wie Du es brauchst... Prinzip sollte ja bis hier soweit klar sein (falls nicht, einfach fragen!) :)

In der Konsole kannst Du jetzt auch nochmal kurz einen Blick über die erstellten Dateien werfen. Um bei allen Dateien das vollständige Datum inkl. Uhrzeit sehen zu können (vor allem bei älteren!), braucht der Befehl "ls" allerdings noch einen Zusatz in Form von "--full-time", womit der konkrete Befehl dann ls --full-time lautet. Ansonsten werden bei älteren Dateien nur die Datumsangaben angezeigt - hier mal ein entsprechender Screenshot:

1747385500479.png

So... nun haben wir vermutlich schon einen Haufen Dateien zum testen erzeugt - nun geht es an die Filterung. Wie gesagt, lassen wir die Löschung erstmal aussen vor und schauen erstmal nur, dass wir auch die korrekten Ergebnisse bekommen. Das könnte dann z.B. so aussehen:

find /root/config/www/date-test/ -name "*.txt" -mtime +7 (älter als X-Tage)

Das sieht dann beim testen halt so aus:

1747386108919.png

Musste halt mal schauen, wie es dann für Dich passt. Danach kannst Du auch mal einen Lösch-Testlauf starten indem Du noch ein "-delete" hinter den Befehl hängst:

1747386346621.png

Wenn es dann wunschgemäß für Dich filtert, änderst Du den Befehl einfach mal auf das gewünschte Verzeichnis ab, gleiches dann eben auch für den Zeitraum z.B.:

find /Pfad/zu/den/gespeicherten/Bildern/ -name "*.jpg" -mtime +14

Natürlich zum testen erstmal ohne "-delete". Ich möchte an dieser Stelle nochmal darauf hinweisen, dass wir hier grade "nur" Dateien suchen, die dann auch "gelöscht" werden - nicht, dass noch die falschen Dinge gelöscht werden.

Wir wissen ja nun, dass ein "-delete" die gefundenen Dateien entfernt und müssen das "jetzt" auch erstmal nicht weiter testen. Vielmehr muss man sich jetzt darum kümmern, dass ein entsprechendes Script erstellt wird. Am Anfang eines jeden Bash-Scripts steht die Shebang und diese sieht bei Bash dann einfach so aus: #!/bin/bash. Ansonsten kann man im Script dann auch einfach die Konsolenbefehle nutzen, womit das "Script" dann eigentlich auch nur aus 2 Zeilen besteht:

Bash:
#!/bin/bash
find /Pfad/zu/den/gespeicherten/Bildern/ -name "*.jpg" -mtime +14

Kannst Du mittels irgendeinem Editor erstellen, oder dem Kram einfach direkt aus der Shell in eine Datei pumpen. Hier beispielhaft mal der Dateiname "script.sh", kannst Du aber nennen wie Du lustig bist.

echo '#!/bin/bash' > script.sh
echo 'find /Pfad/zu/den/gespeicherten/Bildern/ -name "*.jpg" -mtime +14' >> script.sh

Danach muss das Script noch ausführbar gemacht werden:

chmod +x script.sh

Dann das Script auch einmal testen mittels ./script.sh. Wenn alles läuft, wie Du es Dir vorgestellt hast, packst Du im Script (ggf. in HA über den Editor) noch kurz das "-delete" hinten an den find-Befehl und das Script ist einsatzbereit.

Alles weiter dann "vermutlich" (weisst ja, bin nicht so der HA-Crack) einfach via HomeAssistant - Shell Command, wobei Du vermutlich auch einfach den find-Befehl darüber starten könntest, aber warum einfach, wenn es auch kompliziert geht und die Shell-Scripte kannst Du auch abseits von HomeAssistant nutzen (wer weiss schon, was die Zukunft noch so bringt) 🙃
 
@blurrrr
Leck mich fett, was nee Antwort, Respekt, und vielen Dank !!

Das führe ich mir mal zu Gemüte und spiele "etwas" rum, hab ja jetzt mal nen Ansatz (y)
Werde berichten !
 

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
6.680
Beiträge
64.104
Mitglieder
6.935
Neuestes Mitglied
Syndikat
Zurück
Oben