FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: Torxgewinde am 24 März 2025, 07:29:20

Titel: 🚮 Dateien löschen die älter als ein Tag sind
Beitrag von: Torxgewinde am 24 März 2025, 07:29:20
Hallo,
Mal ein ganz simpler Snippet um täglich einen Ordner von alten Dateien zu befreien, sprich um Dateien die älter als ein Tag sind zu löschen (Ein at-Device hätte es auch getan, aber ich bevorzuge DOIF):

⚠️ Vorsicht bei der Wahl des Ordners, der Befehl löscht alles was älter als ein Tag ist ⚠️

defmod TaeglichTimer DOIF ([00:00:01])\
({for my $file (glob "/opt/fhem/www/SVGcache/*") { if (-f $file && -M $file > 1) { Log(1, "TaeglichTimer: Deleting: $file");; unlink $file or Log(1, "TaeglichTimer: Failed to delete $file: $!");; }}})\

attr TaeglichTimer do always
Titel: Aw: 🚮 Dateien löschen die älter als ein Tag sind
Beitrag von: betateilchen am 24 März 2025, 08:29:53
Änderungen auf Betriebssystemebene (z.B. multiples löschen von Dateien oder Verzeichnissen) mache ich immer auf Betriebssystemebene mit einem cronjob.

find /tmp/* -mtime +7 -exec rm {} \;
Titel: Aw: 🚮 Dateien löschen die älter als ein Tag sind
Beitrag von: yersinia am 24 März 2025, 09:24:23
find (https://man7.org/linux/man-pages/man1/find.1.html) kann auch ohne übergabe an rm löschen:
find /tmp/* -type f -mtime +7 -deleteMan kann mit type (https://man7.org/linux/man-pages/man1/find.1.html) noch weiter einschränken (hier file)
Titel: Aw: 🚮 Dateien löschen die älter als ein Tag sind
Beitrag von: betateilchen am 24 März 2025, 10:03:28
Ja, mein code sollte auch nur ein Beispiel sein, wie man Dateiaktionen auf Betriebssystemebene mit "älter als" umsetzen kann, rm war halt das aktuelle Beispiel. Man kann aber auch andere Befehle aufrufen, was dann mit find selbst nicht mehr geht. Ich nutze sowas zum Beispiel, um Dateien in einen S3-Speicher zu verschieben.
Titel: Aw: 🚮 Dateien löschen die älter als ein Tag sind
Beitrag von: DeeSPe am 24 März 2025, 10:16:26
Aus dem FHEM Sonos Wiki (https://wiki.fhem.de/wiki/SONOS#Variante_f%C3%BCr_die_crontab) benutze ich:
find /opt/fhem/SonosSpeak -name "RINCON*" ! -atime -5 -deleteum die Sprachausgabedateien zu löschen die länger als 5 Tage nicht benutzt wurden.

Gruß
Dan
Titel: Aw: 🚮 Dateien löschen die älter als ein Tag sind
Beitrag von: Torxgewinde am 24 März 2025, 14:59:02
Danke für die Ideen.

Ein Vorteil, solch einen Aufräumvorgang in FHEM zu starten, ist die Möglichkeit, Logeinträge dazu zu haben und/oder sich eine Pushnachricht zu senden. Das ist besonders nützlich, wenn man den Vorgang regelmäßig ausführt. Im Gegensatz zu interaktiven Shell-Befehlen, bei denen man oft keine Logs hat, bietet FHEM eine bessere Möglichkeit zur Protokollierung und Wiederauffindbarkeit. Außerdem ist es praktischer, den Vorgang in FHEM zu integrieren, anstatt einen zusätzlichen crontab-Eintrag zu erstellen, insbesondere wenn man längere Zeit nicht auf der Shell des Servers aktiv ist.
Titel: Aw: 🚮 Dateien löschen die älter als ein Tag sind
Beitrag von: CoolTux am 24 März 2025, 23:29:36
Da hier unterschiedliche Methoden gezeigt werden. Hier mal ein Ansible Playbook um das FHEM Backup-Verzeichnis auf zu räumen.

- name: Cleanup backup directory's at fhem servers
  hosts: fhemserver
  become: true
  gather_facts: false
  vars:
    fhembackuppath: /opt/fhem/backup
    olderthan: 7d
  tags:
    - cleanbackup-fhemserver
  tasks:
  - name: clean up the "{{ fhembackuppath }}" - delete files older than "{{ olderthan }}"
    block:
    - name: find all files that are older than "{{ olderthan }}"
      find:
        paths: "{{ fhembackuppath }}"
        age: "{{ olderthan }}"
        recurse: no
      register: filesOlderThan
    - name: remove older than "{{ olderthan }}"
      file:
        path: "{{ item.path }}"
        state: absent
      with_items: "{{ filesOlderThan.files }}"