Dateien nach Anzahl Dateien im Ordner löschen

  • ,Hallo zusammen,


    ich möchte auf meinem NAS täglich alle Dateien mit dem Dateinamenschema "Tagessicherung*.*" außen den aktuellsten sieben Dateien löschen. Gibt es dafür irgendeinen Weg über die graphische Oberfläche, oder muss ich da manuell in die Cron-Tabelle rein, wie es hier beschrieben ist?


    Und wenn es nur über die Cron-Tabelle geht, wäre dann die folgende Zeile die richtige, wenn ich täglich um 3 Uhr aus dem Ordner taeglich alle Dateien, die mit "Tages" anfangen und die Extension .nbd haben bis auf die letzten 7 Dateien löschen will:


    0 3 * * * ls -tp /Backup/taeglich/Tagessicherung*.nbd | grep -v '/$' | tail -n +7 | xargs -I {} rm -- {}

    Ich muss dazusagen, dass ich diese Zeile mit Hilfe eines anderen Forums zusammengestellt habe. Ich bin absoluter Linux-Analphabet.



    Danke im Voraus,

    Sarek \\//_

  • Wieso verwendest Du für Dein Backup oder Tagessicherung nicht ein Programm, welches dies automatisch macht? Es gibt genügend die sie können, kostenlose und kostenpflichtige.

  • So viele Programme im für Non-Profits bezahlbaren Rahmen gibt es da leider nicht, die den gewünschten Funktionsumfang (Dateibasiertes- und Imagebackup, Verschlüsselung des Backups, lauffähig auf Windows Server) und, als eine zentrale Vorgabe: Die Anmeldedaten für die Freigabe auf dem NAS dürfen nicht unter Windows gespeichert werden, damit eventuelle Malware keine Chance hat, die Backups zu zerstören. Die Anmeldedaten für die Freigabe sollen ausschließlich im Backup-Programm hinterlegt sein.


    In der Tat hatte ich bis vor kurzem ein Programm, welches dazu in der Lage war. Allerdings hatte Z-DBackup Probleme mit der Imagesicherung (Disaster- bzw. Bare-Metal-Recovery), und der Support von denen scheint nicht zu existieren - ich hatte über Wochen mehrfach versucht, den zu kontaktieren, es gab nicht mal eine Rückmeldung nach dem Motto "ist angekommen, wir kümmern uns drum". Saftladen!


    Momentan teste ich NovaBACKUP. Das Programm scheint recht gut zu sein. Für das Backup kann man tatsächlich die Anmeldedaten zum Sicherungsziel im Programm hinterlegen. Das Konzept wurde aber nicht sauber zuende geführt. Schon für das Überprüfen der Sicherung muss man einen Windows-Benutzer haben, der auf das NAS zugreifen kann. Gut, da ist es kein Problem, weil man da nur Lesezugriff benötigt. Aber eben auch das "Aufräumen" (also Löschen der jeweils ältesten Sicherung über die Anzahl der aufzubewahrenden Sicherungen hinaus) funktioniert nicht mit den im Programm hinterlegen Anmeldedaten, sondern benötigt einen Windows-Benutzer mit Schreibrechten auf das NAS.



    Daher möchte ich die Löschfunktion direkt über das NAS realisieren.

  • Ah ok, ich sehe das Problem. Für diese speziellen Erfordernisse kenne ich jetzt auch kein Backup-Programm. Für diesen Fall sichere ich mit mehreren getrennten Medien. Bei Malware-Befall kann es max. eines treffen. Aber für eine Tagessicherung wieder entsprechend manueller Aufwand.


    In Deinem Fall wirst Du wohl doch die Konsole bemühen müssen. Etwas anders ist mir jetzt nicht bekannt. Allerdings weiß ich jetzt nicht, ob es die Konsolenbefehle tail und xargs auch auf der QNAP gibt. Die hat nämlich einen reduzierten Befehlssatz und ist erschwerend auch noch vom Modell abhängig. Ich nehme an, dass die von Dir oben erwähnte Befehlszeile für ein "normales" Linux gedacht ist.


    Edit:

    tail und xargs scheint es bei meinem TS-328 zu geben:

    Mal bei einem Testverzeichnis ausprobieren. Eventuell kann auch warpcam einen Blick darauf werfen.

    Einmal editiert, zuletzt von Mavalok2 ()

  • Ich konnte das jetzt testen und zwei kleinere Fehler beheben:


    1. Der Pfad ist nicht /backup/taeglich sondern /share/Tagessicherung
    2. ich muss bei tail einen Zähler mehr angeben, als ich tatsächlich brauche, bei sieben aufzubewahrenden Sicherungen also +8

    Meine Zeile schaut nun so aus:


    Code
    1. ls -tp /share/Tagessicherung/Tages* | grep -v '/$' | tail -n +8 | xargs -I {} rm -- {}


    Wenn ich nur den Teil bis zum tail -n +8 eingebe, dann werden die zu löschenden Dateien richtig aufgelistet.


    Wenn ich die vollständige Zeile eingebe, kommt eine Fehlermeldung:


    Code
    1. xargs: invalid option -- 'I'


    Hat dazu jemand eine Idee?



    EDIT 2019-03-31 13:45:


    Die XARGS-Version im NAS schien tatsächlich abgespeckt zu sein, nach der Installation von Entware funktioniert die Kommandozeile grundsätzlich:


    Code
    1. ls -tp /share/Public/Tages* | grep -v '/$' | tail -n +8 | /opt/bin/xargs -I {} rm -- {}


    Was leider nicht klappt, ist die Ausführung des ganzen per CronJob. Der Cron Eintrag lautet:


    Aber nach 13 Uhr waren trotzdem noch mehr als fünf Dateien vorhanden, der Job wurde also offenbar nicht ausgeführt.




    EDIT 2019-03-31 15:10:


    Problem gelöst. War mein Fehler, wenn ich "0 0 0" statt "* * *" schreibe :-)

    5 Mal editiert, zuletzt von Botschafter Sarek () aus folgendem Grund: Update