Cronjob um Dateien und Ordner die älter als 7 Tage sind löschen

S

staybb

Grünschnabel
Hallo,

ich habe auf einem Server einen HTTP File-Explorer installiert (AjaXplorer), auf dem User Dateien hochladen und verschicken können.

Wenn ein User eine Datei hochlädt wird diese in seinem upload Ordner unter dem entsprechenden Verzeichnis gespeichert (z.B: /var/www/data/personal/user).

Nun möchte ich einen cronjob erstellen der täglich neue hochgeladene Dateien und neu erstellte Ordner nach ihrem Upload-Datum prüft und wenn diese älter als 7 Tage sind automatisch löscht.

Also am besten wäre es, wenn ich nur einen Cronjob erstellen müsste, der folgende Ordnersstruktur hierachisch nach neuen Dateien und Ordner überprüft und dann entsprechend löscht:
/var/www/data/personal
 
Rechts oben ist ein Fenster für die Suche ...
Als Suchbegriff würde ich vorschlagen "Dateien löschen die älter sind als"

Alternativ wirf mal in den Kasten "Ähnliche Themen" unter diesem Thread einen Blick.

mfg
HeadCrash
 
find -P "/var/www/data/personal/user/" -maxdepth 1 -type f \( -name '*' \) -ctime +7 -exec rm {} \;
 
Danke!

Ich möchte den cronjob zuerst testen, bevor ich ihn auf dem scharfen System eintrage.

Wie kann ich zum Testen eine Datei so manipulieren, dass sie als eine "7-tage alte" Datei anerkannt wird, wenn ich diese erst heute heute auf den Server hochlade?
 
Das Problem hatte ich auch. Ich habe zwei Dateien genommen die zwei und drei Tage alt sind (irgendwelche bak Dateien waren das aus dem log) in einen Ordner geschmissen und die -ctime auf +2 gestellt. Mir hat das gereicht.

Gruß

NULL
 
Mit touch.
Code:
tg@slartibartfast:~/tmp$ touch 1
tg@slartibartfast:~/tmp$ ls -l 1
-rw-r--r-- 1 tg users 0 Nov 19 18:15 1
tg@slartibartfast:~/tmp$ touch -d "20121112" 1
tg@slartibartfast:~/tmp$ ls -l 1
-rw-r--r-- 1 tg users 0 Nov 12 00:00 1

Bem: Mit Zitat waere mein Beitrag wohl leichter zu lesen gewesen - bezieht sich auf #4.
 
Zuletzt bearbeitet:
ok der cronjob funktioniert.
1 * * * * find -P "/var/www/data/personal/user/" -maxdepth 1 -type f \( -name '*' \) -ctime +7 -exec rm {} \;

Ich habe nun noch einen Feinschliff den ich machen müsste.

Unter /var/www/data/personal/ werden immer neue Benutzer auf der Plattform angelegt. So wie der cronjob jetzt ist, müsste bei jedem Anlegen eines User auch ein seperaten Cronjob mitangelegt werden, der dann zb. für das Verzeichnis:
/var/www/data/personal/Person1
/var/www/data/personal/Person2
/var/www/data/personal/Person3
/var/www/data/personal/Person4

greifen müsste.

Ich müsste jetzt einen globalen cronjob einrichten, der jeden Unterordner in "/var/www/data/personal/..." auf Dateien und Ordner welche älter als 7 Tage sind durchsucht und automatisch löscht.

Das Problem das ich dabei habe; Es werden auch Systemordner und die eigentlichen Personenordner gelöscht, da diese ja auch älter als 7 Tage sind.

Gibt es da irgend eine Möglichkeit dies auszuschließen? Wahrscheinlich nicht oder hat jemand eine Idee?
 
Zuletzt bearbeitet:
Du kannst die Struktur doch im Ajaxplorer anpassen. Also die Repositorys irgendwo anlegen, wo die User nicht gemixt mit System Dateien sind.
 
@returnNull: Ja das werde ich wahrscheinlich ab der neuen Ajaxplorer Version auch nutzen.

Momentan habe ich für alle Repositorys einen cronjob angelegt. Dieser löscht die hochgeladenen Dateien, die älter als 7 Tage sind aus den jeweiligen Verzeichnissen.

Jetzt möchte ich noch das der cronjob auch neu erstellte oder hochgeladene Ordner automatisch löscht.

ich habe das rm -R erweitert, aber er löscht keine Ordner.

1 * * * * find -P "/var/www/data/personal/user/" -maxdepth 1 -type f \( -name '*' \) -ctime +7 -exec rm -R {} \;

Was muss ich dem Befehl mitgeben das er auch Ordner löscht? Und wie kann ich einen bestimmten Ordnernamen in dem job mitangeben, der nicht gelöscht werden soll (ein system ordner)?
 
Also ich habe es auch mit rm -fr versucht, leider löscht kein einziger cronjob Eintrag momentan Dateien.

So steht er momentan in der crontab -e:
0 * * * * find -P "/var/www/data/personal/user/" -maxdepth 1 -type f \( -name '*' \) -ctime +7 -exec rm -fr {} \;

Wie kann ich feststellen, ob der cronjob überhaupt momentan noch greift bzw. aktiv ist?
 

Ähnliche Themen

Prblem mit zeilenweises auslesen von Datei und schreiben nach mysql

Brauche 2 Skripte

Shellskript zum löschen von Dateien

Dateien automatisch löschen -> Fehlermeldung im Mail

X Tage alte Dateien löschen

Zurück
Oben