Script zum automatischen löschen

ricer

Cadet 3rd Year
Registriert
Mai 2008
Beiträge
33
Hallo,

ich möchte ein einfaches Script erstellen zum Löschen nicht verwendeter Verzeichnisse (Ordner+Dateien).
Folgendermaßen soll das ganze funktionieren:
Wenn auf einen Ordner z.b. 4 Wochen nicht zugegriffen wurde soll der Ordner samt aller Unterordner und Dateien gelöscht werden.

Nun habe ich schon gelernt dass ich das mittels "find" lösen kann. Hier mal mein erster Ansatz:

find "Verzeichnis" -maxdepth 1 -type d -atime +28 -exec rm -rf {} \;

Kann das so funktionieren?
Es soll immer entweder das ganze Verzeichnis oder eben gar nichts gelöscht werden.
Wurde also auf vereinzelte Unterordner im Verzeichnis länger nicht zugegriffen wird nichts gelöscht.
Wurde aber auf das komplette Verzeichnis nicht zugegriffen wird alles gelöscht.
Bin ich da auf dem richtigen Weg?

Danke!
 
bist du dir sicher mit atime? das geht auf 'last accessed'

find /home/ricer/belastendesMaterial/* -type d -ctime +28 -exec rm -rf {} \;

-ctime schaut nach last changed

aber ja, macht was du willst :)
 
So wie er es schreibt ist accessed richtig. Er spricht ja von Zugriff.
Changed ist ja ein Spezialfall von Zugriff.
 
Wenn die atime überhaupt aktiv ist. Oft schaltet man die ab um die SSD vor übermäßigen Schreibzugriffen zu schützen.
 
ja, ich denke schon dass atime das ist was ich brauche?

zur Erklärung:
Ich stelle Daten zur Verfügung und informiere wo darauf zugegriffen werden kann.
Wenn x Tage niemand mehr zugegriffen hat gehe ich davon aus dass kein Interesse mehr besteht und lösche das komplette Verzeichnis wieder.
 
@ricer: Funktioniert das find den grundsätzlich mit dem atime?
Also bei solchen Befehlen ist es halt oft sinnvoll, sich langsam zum Ziel zu hangeln und eins nach dem anderen erst mal umzusetzen.

Also das Löschen ist dann das, was man zuletzt dazu packt...

Im ersten Schritt halt erst mal nur das finden. Kommt da das erwartete raus oder nicht?

Ich habe im Übrigen die maxdepth in Verdacht, die madmax2010 auch weggelassen hat.
 
  • Gefällt mir
Reaktionen: madmax2010
Probiere es einfach aus. ohne das Löschen. Meinetwegen verschiebe die Dateien in einen anderen Ordner oder so.
 
Ja, klar das löschen natürlich zum Schluss.
Ich würde das auch auf einem Test-Verzeichnis zuerst mal ausprobieren.

Die maxdepth habe ich eben aus folgender Überlegung drin:
Nach 27 Tagen holt sich jemand eine Datei aus dem Verzeichnis und kommt dann nach 2 Tagen drauf dass er noch eine Datei aus einem anderen Verzeichnis vielleicht 1 Ebene darunter braucht.
Das könnte aber dann schon weg sein weil darauf eben vielleicht schon länger nicht zugegriffen wurde, oder?
 
Wenn Dateien potentiell noch gebraucht werden, willst du die Daten nicht erstmal weg archivieren und dann nach 30 wieteren Tagen löschen?



Durch type d schaut er schon nur auf verzeichnisse
 
Ach, ich hatte das als Problem gesehen, nicht als Absicht.

Ich dachte, du hättest es schon mal ausprobiert.
 
Die Daten sind anderweitig gesichert, es geht nur darum dass sie für einen bestimmten Zeitraum (solange sie eben gebraucht werden) zur Verfügung gestellt werden.

Bin mir eben wegen dem "alles oder nichts" unsicher ob das so funktionieren kann:
  • wenn auf kein Verzeichnis zugegriffen wurde - alles löschen
  • wenn auf 1 Verzeichnis zugegriffen wurde - nichts löschen
Ich werde es mal testen und hier berichten.
 
Ich kenne die Befehle jetzt nicht im Detail - du solltest sicherstellen, dass alle Unterordner und Dateien in einem Ordner auch eine atime älter 28 Tage haben bevor ein Ordner gelöscht wird.

Zumindest bei Windows weiß ich, dass bloß weil eine Datei irgendwo tief im Dateibaum geändert/zugegriffen wird, die Ordner darüber davon was wissen.

Nachher sieht dein Befehl 'Oberordner wurde 28 Tage nicht explizit gelesen, jetzt lösche ich alles' und dann sind deine aktiven Arbeitsdateien weg weil du immer über einen Shortcut auf die gegangen bist...


Ich hatte etwas ähnliches mal bei einem Windows Server, da wurde das über ein Powershell Skript gelöst, das alle childitems durchgegangen ist
Das war allerdings auch auf nur eine Ordner-Ebene beschränkt
 
Danke für den Input, das ist genau das was ich meine.
Müsste ich dann nicht mit "find" die Anzahl der geänderten Verzeichnisse und Dateien zählen und wenn das Ergebnis größer 1 ist nichts löschen, bei 0 jedoch das komplette entsprechende Verzeichnis?
 
@znep: Deshalb sind wir auch im Linux-Board:
1649255705793.png
 
  • Gefällt mir
Reaktionen: Schtefanz
Zurück
Oben