Shellscript, Dateien älter als X Tage löschen

Hallo ihr ehrwürdigen Wissenden :wink:

Ich habe einen Ordner der sich mit Junkdateien füllt. Diese Dateien sind nach 3 Tagen ungültig.
Nun möchte ich ShellScript welches alle Dateien in diesem Ordner die älter als 3 Tage sind löscht.

Da gibt es doch sicher eine saubere, schnelle Lösung !??!

Herzlichen Dank für eure Hilfe,
kst

Morgen

Ich habe einen Ordner der sich mit Junkdateien füllt. Diese
Dateien sind nach 3 Tagen ungültig.
Nun möchte ich ShellScript welches alle Dateien in diesem
Ordner die älter als 3 Tage sind löscht.

Da gibt es doch sicher eine saubere, schnelle Lösung !??!

Herzlichen Dank für eure Hilfe,
kst

Welche Shell (bsh, bash, csh, ksh …)?

$ echo $SHELL

Gruss
Olli

… ev. so …?

$ ls -tr | head -n -3 | xargs -i rm '{}'
$ man ls
$ man tail
$ man head
$ man xargs

Gruss
Olli

… oder so …?

find . -atime -3 | xargs -i rm '{}'

QUELLE: http://www.ping.de/sites/iris/ingo/unix.html#findtime

Tach Kurt,

alte Frage (gabs schon häufiger). Hier ist ‚find‘ dein Freund (siehe auch ‚man find‘):

 find 'VerzeichnisMitJunkFiles' -type f -mtime +3 -exec rm {} \;

Ungetestet, sollte aber auf allen Unix-System so laufen (GNU-find kann bestimmt noch 1000 Optionen mehr :wink:.

Einschränkung(en):

  1. wenn dein JunkVerzeichnis auch Unterverzeichnisse (evtl. gar mit wichtigen Daten) enthält, werden diese auch gnadenlos weggebügelt (da gabs doch auch ne Option -prune oder so).

  2. der Vergleich mittels -mtime ist manchmal etwas überraschend (rechnet auf Sekundenbasis, lösct hier alle Files die vor mehr als 3*86400 Sekunden verändert wurden). Solltest du alle Files vor dem z.B. 10.7.2006 0:00 löschen wollen, musst du dir erst eine Referenzdatei anlegen (siehe touch) und dann ggf. mit Option -newer Refedatei (bzw. der Negation davon!!) testen.

gruss
bernhard

Danke für eure superschnellen Antworten!!!

Zur Frage welche Shell:
Die Umgebungsvariable gibt /bin/sh zurück. Ist aber die bash (SymLink)!

Nochmals Herzzzzzzlichen Dank!!

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

$ ls -tr | head -n -3 | xargs -i rm ‚{}‘

schlechte Idee: das löscht die drei ältesten Dateien, nicht die Dateien, die Dateien, die älter als drei Tage sind.

Bei rm sollte man vorsichtig sein :wink:

„What’s the big deal with rm -rf? I’ve been deleting stuff for years and never … OOPS“. (Quelle ist mir leider unbekannt).

Grüße,
Moritz

  1. wenn dein JunkVerzeichnis auch Unterverzeichnisse (evtl.
    gar mit wichtigen Daten) enthält, werden diese auch gnadenlos
    weggebügelt (da gabs doch auch ne Option -prune oder so).

-maxdepth