iceget
Goto Top

Debian Linux älteste Datei löschen

Hallo liebe Community,

ich habe folgendes Problem:
Ich synchronisiere täglich auf einen Backupserver meine Daten (von verschiedenen Servern).
Dort werden am Backupserver Ordner angelegt, die dann gesichert (z.B. 20140301-Server-1) werden.
Dann sind wieder einzelne Backups dabei, die eben nur 20140301-Srv2.7z Dateien sichern.

Ich habe bereit eine Routine geschrieben, sobald der lokale Speicherplatz 90% übersteigt, das dieser automatisch eine Mail rausschickt.

Nun würde ich jedoch gerne nach erreichen der 90% automatisch vom Mountpoint /backups die ältesten 5 Dateien automatisch löschen lassen.

Leider habe ich bis jetzt immer nur Scripts gefunden, die ganze Ordner löschen, ... mir wäre es egal wenn die Ordner bestehen bleiben, und nur die Dateien gelöscht werden.

Die meisten Scripts die ich gefunden habe, löschen nur Dateien "älter als" aber nicht "die ältestens vom gesamten Verzeichnis..."

Habt ihr eine Idee oder so etwas schon mal umgesetzt? Einfach die ältesten 5 Dateien zu löschen..


Vielen Dank!

Lg Iceget

Content-Key: 231509

Url: https://administrator.de/contentid/231509

Printed on: April 26, 2024 at 12:04 o'clock

Member: Arano
Arano Mar 03, 2014 at 14:08:47 (UTC)
Goto Top
Hallo Iceget,

genau soetwas habe ich bei mir auch gemacht. Nur das ich mit jedem neuem Backup (3 Dateien), eben auch 3 alte lösche und so immer nur Backups der letzten X Tage (am Anfand habe ich leere DummyDateien erstellt und ihnen mit touch den passenden Zeitstempel versehen).

Bekomme es gerade nicht 100%ig zusammen, musst du noch mal probieren.
for oldFile in `ls -t "/backupdir" | head -n3`; do  
    echo "rm $oldFile"  
done
Vieleicht war es auch ls -tr
Also den Inhalt des Verzeichnisses nach Zeit sortiert (-t) ausgeben und dann (head -n3) nur die ersten 3 Dateien.
(
-r um die Liste in umgekehrter Reihenfolge auszugeben... weiß gerade nicht in welche Richtung -t sortiert face-smile
)


~Arano
Member: Cthluhu
Cthluhu Mar 03, 2014 at 15:39:31 (UTC)
Goto Top
Hi,

Mit "ls -t" und "head -n3" ist Arano schon auf dem richtigen Weg. Nur einen Fallstrick gibts da noch: Wenn weniger als 3 Elemente da sind, wird alles gelöscht. Das sollte eventuell noch abgefangen werden.

mfg

Cthluhu
Member: Arano
Solution Arano Mar 03, 2014, updated at Nov 13, 2014 at 12:50:42 (UTC)
Goto Top
Hi,

Oh, das ist ein guter Hinweis... aber ich verstehe es nicht !?
@Cthluhu: Wieso sollte denn dann alles gelöscht werden ?
Das sieht doch gut aus:
arano@home:~/test$ touch asd
arano@home:~/test$ touch wer
arano@home:~/test$ touch sdf
arano@home:~/test$ for i in `ls -t|head -n2`; do echo " rm $i"; done  
 rm sdf
 rm wer
arano@home:~/test$ for i in `ls -t|head -n3`; do echo " rm $i"; done  
 rm sdf
 rm wer
 rm asd
arano@home:~/test$ for i in `ls -t|head -n4`; do echo " rm $i"; done  
 rm sdf
 rm wer
 rm asd
arano@home:~/test$ for i in `ls -t|head -n5`; do echo " rm $i"; done  
 rm sdf
 rm wer
 rm asd
arano@home:~/test$ 


Aber es ist wohl doch `ls -tr`
Den die Datei "asd" habe ich zuerst angelegt -> die älteste und
die Datei "sdf" als letztes -> die jüngste.

In meinem Fall würde ich also das gerade gemachte Backup , als erste wieder löschen - auweia...
man ls
-t Nach Änderungszeit sortieren
Das listet mir die neueste Datei zuerst und die älteste zuletzt auf.
Also wie schon vorgeschlagen mit -r umdrehen, oder anstelle von head -> tail verwenden.


~Arano
Member: Cthluhu
Solution Cthluhu Mar 03, 2014, updated at Nov 13, 2014 at 12:50:41 (UTC)
Goto Top
Hi Arano,

Der Denkfehler liegt schon in der Aufgabenstellung. Es handelt sich um Backups. Sind nur 3 Backups vorhanden und man löscht die letzten 5 Backups, sind alle Backups gelöscht (siehe Zeile 15 in deinem Beispiel). Da muss noch eine Abfrage rein, dass immer zumindest ein Backup übrig bleibt.

mfg

Cthluhu
Member: Arano
Solution Arano Mar 03, 2014, updated at Nov 13, 2014 at 12:50:40 (UTC)
Goto Top
Hahaha... achso ja stimmt !

Ich dachte der Fehler wäre im Script... also das etwas wie `rm *` erzeugt würde was dann alles löscht.
Aber du hast Recht !
Da es sich um Backups handelt, lieber auf Nummer sicher gehen.
Ich lösche bei mir zwar auch nur, sofern es beim kopieren keine Fehler gab. Und um etwas Vorlauf zu erzeugen habe ich einfach ein paar leere Text-Dateien erstellt. Aber die Sicherung, das mindestens das letzte nicht versehentlich weg gelöscht wird, kann definitiv nicht schaden.

Aber da kümmere ich mich später mal drum. Momentan läuft DIESES Backup eh nicht face-big-smile da ist das egal
Mir ist die Backupfestplatte kaputt gegangen und die Gelegenheit wird genutzt etwas umzurüsten
Bei wieder einrichten wird es dann angepasst.


Danke für den Hinweis !


Schönen Abend noch
~Arano