Datei älter als X Tage löschen

Status
Für weitere Antworten geschlossen.

Chrunchy

Benutzer
Mitglied seit
05. Mrz 2007
Beiträge
470
Punkte für Reaktionen
0
Punkte
16
Hallo zusammen,

ich brauche mal Hilfe von einem Linux-Crack.

Ich nutze meine DS-207 als Backup-System. Da ich von den Hardlinks, die der DR anlegt nicht wirklich überzeugt bin, nutze ich zusätzlich noch Robocopy, um quasi ein zweites (vollständiges) Backup zu haben.

Nun ist es dabei so, dass die Dokumente im Backup vorhanden bleiben sollen, sofern diese auf der Workstation gelöscht werden. Für die Datenbankbackups (Immerhin 2GB groß) gilt das aber nicht.

Ich dachte mir nun, dass ich täglich mittels cron nen delete Befehl auf alle *.bak Dateien absenden kann, die älter als z.B. 5 Tage sind.

Der Umgang mit der Crontab ist mir geläufig. Einzig die Prüfung auf das Dateidatum will mir nicht gelingen.

Wäre schön, wenn mir jemand den entscheidenden Tip geben könnte.

Danke.
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Rich (BBCode):
find /backup-Verzeichnis -name '*.bak' -mtime 5 -exec rm {} \;

Die Erläuterungen findest hier

itari
 

Chrunchy

Benutzer
Mitglied seit
05. Mrz 2007
Beiträge
470
Punkte für Reaktionen
0
Punkte
16
Danke itari.

das rm {} löscht demnach dann alle '*.bak', und wenn ich nach '*.tmp' suche, so löscht es die. So zumindest verstehe ich das readme. {} ist ein Platzhalter für den find-string.

Da keine Angabe zur Pfadtiefe gemacht wurde, gehe ich davon aus, dass alle Verzeichnisse unterhalb von /backup-Verzeichnis durchsucht werden, oder?

NACHTRAG: Kann ich das auch auf Verzeichnisse anwenden, die an Stichtag angelegt wurden, deren Inhalte aber andere (ältere) Dateien haben?
Zweck: automatisches Löschen von mittels wget erzeugter Backup-Verzeichnisse.
 
Zuletzt bearbeitet:

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Danke itari.

das rm {} löscht demnach dann alle '*.bak', und wenn ich nach '*.tmp' suche, so löscht es die. So zumindest verstehe ich das readme. {} ist ein Platzhalter für den find-string.

ja, wenn du statt -exec ... nur -print angibst, siehst du, dass er pro gefundener Datei einen Pfad generiert. Das ist das {}.

Da keine Angabe zur Pfadtiefe gemacht wurde, gehe ich davon aus, dass alle Verzeichnisse unterhalb von /backup-Verzeichnis durchsucht werden, oder?

Richtig, der find arbeitet grundsätzlich den ganzen Baum ab, ab der Stelle, die du angibst (solange man ihn nicht mit einer zusätzliche Option daran bremst). Du kannst auch fein justieren, ob er symbolische Links auflösen soll oder nicht.

Probiert den find aber erstmal ein wenig aus, sonst löschst dir am Ende mehr als du wolltest ;)

Noch Anmerkungen:
der find beachtet Zugriffsrechte; der find läuft auch in der crontab; der find prüft das Alter der Dateien, nicht das Alter der Verzeichnisse, die er druchläuft. Wenn du Verzeichniss- und Dateialter synocronisieren willst, musst entweder beim Backup-Programm das einstellen, dass er das Dateidatum neu setzt oder dich mit touch behelfen.

itari
 

Chrunchy

Benutzer
Mitglied seit
05. Mrz 2007
Beiträge
470
Punkte für Reaktionen
0
Punkte
16
Ok, habe das ganze jetzt mal getestet.

Es scheint so, als sorgt -mtime dafür, dass Dateien gefunden werden, die genau x Tage alt sind.

Ein '-mtime 10' findet komplett andere Dateien als ein '-mtime 8'. Ich hatte gehofft, dass alle Dateien von '-mtime 10' auch in '-mtime 8' enthalten sind.

Naja, dann wird das Script halt doch täglich und nicht wöchentlich ausgeführt.

Danke nochmal itari.
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Hab das im Manual stehende nicht genau genug gelesen, also nochmal:

find /backup-Verzeichnis -name '*.bak' -mtime +5 -exec rm {} \;

Numeric arguments can be specified as
+n for greater than n,
-n for less than n,
n for exactly n.

Alles klar?

itari
 

Chrunchy

Benutzer
Mitglied seit
05. Mrz 2007
Beiträge
470
Punkte für Reaktionen
0
Punkte
16
Danke vielmals.
 

Biglinker

Benutzer
Mitglied seit
20. Apr 2009
Beiträge
3
Punkte für Reaktionen
0
Punkte
0
Hab das im Manual stehende nicht genau genug gelesen, also nochmal:

find /backup-Verzeichnis -name '*.bak' -mtime +5 -exec rm {} \;

Numeric arguments can be specified as
+n for greater than n,
-n for less than n,
n for exactly n.

Alles klar?

itari

Ist es möglich das die Synology Box die Expression exec nicht versteht.
Also wenn ich den Befehl via Putty von Hand ausführe zeigt er mir USSAGE: Path Expression.... und als Cronjob funktioniert er auch nicht
 

goetz

Super-Moderator
Teammitglied
Sehr erfahren
Mitglied seit
18. Mrz 2009
Beiträge
14.020
Punkte für Reaktionen
273
Punkte
393
Hallo,
Ist es möglich das die Synology Box die Expression exec nicht versteht.
Also wenn ich den Befehl via Putty von Hand ausführe zeigt er mir USSAGE: Path Expression.... und als Cronjob funktioniert er auch nicht

welche Firmwareversion hast Du? Die busybox 1.1.0 aus der 839er akzeptiert -exec mault aber
Rich (BBCode):
DS-106> find /volume1/public/ -name * -exec ls {}\;
find: option `-exec' requires an argument
funktionieren tut aber
Rich (BBCode):
 find /volume1/public/ -name * -print |xargs ls -la

Gruß Götz

PS: per ipkg findutils installieren damit sollte auch -exec funktionieren
 

Biglinker

Benutzer
Mitglied seit
20. Apr 2009
Beiträge
3
Punkte für Reaktionen
0
Punkte
0
Hallo Goetz, danke für deine schnelle Antwort

ja ich habe die busybox 1.1.0 drauf aber aus der 832, mhm sollte eigentlich die aktuellste Firmwareversion sein....

Mein Primäres Ziel ist es Daten welche älter als 30 Tage ist via Crontab zu löschen.

gemäss diesem Befehl
Code:
find /volume1/web -mmin +10 -exec rm {} \;

aber leider tut es zurzeit nicht seinen Dienst und eben wenn ich den Code von Hand eintippe erscheint eben die Meldung welche ich bereits geschildert habe.

mhm ich werde mal deinen Tipp verfolgen und versuche findutils nachzuinstallieren.

Grüsse Biglinker
Hallo,


welche Firmwareversion hast Du? Die busybox 1.1.0 aus der 839er akzeptiert -exec mault aber
Rich (BBCode):
DS-106> find /volume1/public/ -name * -exec ls {}\;
find: option `-exec' requires an argument
funktionieren tut aber
Rich (BBCode):
 find /volume1/public/ -name * -print |xargs ls -la

Gruß Götz

PS: per ipkg findutils installieren damit sollte auch -exec funktionieren
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Das Sternchen muss in einfache Hochkommata ('*') damit es funktioniert, sonst macht die Shell schon einen Dateinamensubstitution bevor der find dran kommt ... und -name '*' kann man dann -glaub ich- auch weglassen, dass wäre sowieso der default.

Itari
 
Zuletzt bearbeitet:

goetz

Super-Moderator
Teammitglied
Sehr erfahren
Mitglied seit
18. Mrz 2009
Beiträge
14.020
Punkte für Reaktionen
273
Punkte
393
Hallo,
-name ist die Macht der Gewohnheit:)
Die Hochkommata sind abhänging von der Implementierung, manche brauchens andere wiederum nicht. Busybox-find der DS braucht sie nicht, aber auch mit tritt der selbe Fehler
Rich (BBCode):
find: option `-exec' requires an argument
auf.

Gruß Götz
 

Biglinker

Benutzer
Mitglied seit
20. Apr 2009
Beiträge
3
Punkte für Reaktionen
0
Punkte
0
mhm


Mit
Rich (BBCode):
find /volume1/web/* -name '*' -mtime +29  -exec rm -rf {} \;

scheint es nun zu klappen, nur dauert die Testphase extrem lange um daraus Schlüsse daraus zu ziehen.

wähle ich aber

Rich (BBCode):
find /volume1/web/* -name '*' -mmin +10  -exec rm -rf {} \;

so meldet mir Putty
Rich (BBCode):
server> find /volume1/web/* -name '*' -mmin +10  -exec rm -rf {} \;
BusyBox v1.1.0 (2009.03.06-16:49+0000) multi-call binary

Usage: find [PATH...] [EXPRESSION]

dasselbe tritt dann auch auf wenn ich anstelle mtime atime nehme...
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Ich glaub, es ist schon gesagt worden, dass man per IPKG den find nachinstallieren sollte, damit er halbwegs die Optionen auch kann.

Itari
 

Nukes

Benutzer
Mitglied seit
22. Dez 2011
Beiträge
2
Punkte für Reaktionen
0
Punkte
0
Verstehe immer noch nicht alles

Erst mal vielen Dank,
ich bin ein blutiger Anfänger und bin sehr froh über dieses Forum.
Es hat mir bereits sehr viel geholfen.
Habe aber doch noch einige Fragen.
1) Ich weis nicht warum, aber sobald ich in meiner Cron-Datei eine Änderung speicher verschwindet am Ende des Befehls um Dateien die älter sind als X Tage das Zeiche "\"
es hat sehr lange gebraucht bis ich das gesehen habe. Ich muß imer zwei Backslash machen um nach dem speichern noch eines zu haben und das in allen zeilen.
Kann mann das abstellen? ist dass normal ?

2) Ich benutze diesen Befehl um ein Mülleimer Verzeichniss gegelmäsig zu reinigen. Gibt es auch einen Befehl um dann lehre verzeichnisse zu löschen ?

3)
Zitat: itari
Ich glaub, es ist schon gesagt worden, dass man per IPKG den find nachinstallieren sollte, damit er halbwegs die Optionen auch kann.

Wie geht dass?


Bereits jetzt vielen Dank für eure Unterstützung
 

Nukes

Benutzer
Mitglied seit
22. Dez 2011
Beiträge
2
Punkte für Reaktionen
0
Punkte
0
Habe versucht in letzter Zeit mehr zu lesen als blöde Fragen zu stellen.
Bin auch um einiges weiter, habe aber immer noch gefährliches Halbwissen.

Benötige hier dringend Eure Hilfe.

das Löschen in der Crontab fuktioniert nicht.
möchte allerdings nicht mit mtime sondern mit atime die dateien selektieren.
Es funktioniert mit mtime in der Cronetab
und der Befehl mit atime funktioniert auch mit Putty.
Kann mir bitte jemand helfen ?

Hier der Befehl aus der Crontab find /volume1/tmp/* -name '*' -amin +600 -exec rm -rf {} \;
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat