Schabi_Alex
Anmeldungsdatum: 9. Oktober 2017
Beiträge: 89
|
Hallo, Ich möchte Verzeichnisse automatisch nach bestimmter Zeit (4Tage) löschen Ich hab dazu ein Bash skript erstellt und lasse dieses mittels Cronjob regelmäßig ausführen. Bash-skritp:
#!/bin/bash
/home/samba-data/Aufzeichnungen/Cam_Eingang/* -mtime +4 -exec rm {} \; Das Problem ist jetzt, dass dieses Script zwar hervorragend alle Dateien löscht aber die enthaltenen Verzeichnisse und Unterverzeichnisse nicht löscht und immer die Rückmeldung liefert:
/home/samba-data/Aufzeichnungen/Cam_Eingang/2018-08-05: Ist ein Verzeichnis Wie kann ich das nun machen, dass die Verzeichnisse in diesem Ordner und dessen unterverzeichnisse auch gelöscht werden? Bitte um Eure Hilfe! Lg
Alexander
|
Mokkujin
Anmeldungsdatum: 2. Mai 2008
Beiträge: 389
Wohnort: Hannover
|
ist aber mit Vorsicht zu genießen solltest vorher schon einiges an Prüfungen am laufen haben. | home/samba-data/Aufzeichnungen/Cam_Eingang/* -mtime +4 -exec rm -rf {} \;
|
|
Schabi_Alex
(Themenstarter)
Anmeldungsdatum: 9. Oktober 2017
Beiträge: 89
|
Hi
Danke für deien Rückmeldung. ich habe das nun geändert bekomme aber trotzdem die Rückmeldung:
autodelete.sh: Zeile 3: /home/samba-data/Aufzeichnungen/Cam_Eingang/2018-08-05: Ist ein Verzeichnis Bitte um weiter Hilfe. In wie fern meinst du das es gefährlich ist? Ich habe in dem Ordner nur Aufzeichnungen von Überwachungskameras und die sollen ausnahmslos gelöscht werden wenn sie den angegeben Zeitraum überschreiten. Lg
Alexander
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
Fehlt da nicht grundsätzlich erst mal der Befehl find am Anfang der Zeile? Den Ordner kann man ja schlecht als Befehl ausführen...
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17548
Wohnort: Berlin
|
Kommt mir auch spanisch vor. | find home/samba-data/Aufzeichnungen/Cam_Eingang -mtime +4 -delete
|
Gnu-find kennt das praktische -delete, Problem gelöst.
|
Schabi_Alex
(Themenstarter)
Anmeldungsdatum: 9. Oktober 2017
Beiträge: 89
|
Danke für Eure Antworten. Meine autodelete.sh sieht nun so aus:
#!/bin/bash
find /home/samba-data/Aufzeichnungen/Cam_Eingang/ -mtime +4 -delete wenn ich das mittesl bash autodelete.sh ausführe, dann bekomm ich zwar keine Fehlermeldung, die Ordner und die darin enthaltenen Dateien werden trotzdem nicht gelöscht. Bitte um weitere Hilfe! lg
Alexander
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
Zeig er dir denn Pfade an, wenn du den folgenden Befehl ausführst?
find /home/samba-data/Aufzeichnungen/Cam_Eingang/ -mtime +4
|
Schabi_Alex
(Themenstarter)
Anmeldungsdatum: 9. Oktober 2017
Beiträge: 89
|
nein er gibt nichts retour: root@Seecamping-Masai-Mara-Server:/home/samba-data/Aufzeichnungen/skripte# bash autodelete.sh
root@Seecamping-Masai-Mara-Server:/home/samba-data/Aufzeichnungen/skripte# find /home/samba-data/Aufzeichnungen/Cam_Eingang/ -mtime +4
root@Seecamping-Masai-Mara-Server:/home/samba-data/Aufzeichnungen/skripte# lg
Alexander
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
Dann gibt es anscheinend keine Dateien, auf die das Kriterium -mtime +4 passt - was sagt denn stat zu einer Datei bzw. Ordner in dem Pfad, die deiner Meinung nach älter als 4 Tage sein sollte?
|
Schabi_Alex
(Themenstarter)
Anmeldungsdatum: 9. Oktober 2017
Beiträge: 89
|
stat liefert folgenden Ordner:
root@Seecamping-Masai-Mara-Server:/home/samba-data/Aufzeichnungen/Cam_Eingang# stat -c=%z 2018-08-05=2018-08-06 00:31:56.560870918 +0200
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
Der Ordner selbst ist dann noch keine 5 Tage alt - schau dir mal die Manpage zu find bei der Option -atime an, da wird beschrieben wie find die Werte als Vielfache von 24 Stunden rundet: When find figures out how many 24-hour periods ago the file
was last accessed, any fractional part is ignored, so to match -atime +1, a file has to have been
accessed at least two days ago.
|
Schabi_Alex
(Themenstarter)
Anmeldungsdatum: 9. Oktober 2017
Beiträge: 89
|
Oh ok danke, Ich dachte sobald der eine Minute über die 4 Tage ist, dann gibt er das auch aus bzw löscht es.
Das erklärt aber jetzt einiges. Mittlerweile bekomm ich ich auf
find /home/samba-data/Aufzeichnungen/Cam_Eingang/ -mtime +4
auch eine Rückmeldung.
|
Schabi_Alex
(Themenstarter)
Anmeldungsdatum: 9. Oktober 2017
Beiträge: 89
|
Ich verwende jetzt
find /home/samba-data/Aufzeichnungen/Cam_Eingang/ -mtime +3 -delete Das ist recht cool weil dann immer nur jene Datein gelöscht werden die gerade "alt genug" sind. Leider löscht der Befehl nur alle Datein und lässt alle ordner sowie Unterordner zurück...
gibt es dafür noch eine Lösung? Bzw. gibt es eine Lösung welche alle Datein löscht die älter sind als 72 Studen? Also quasi ich lasse via Cronjob jede Stunde ein skript ausführen und alle Datein die da älter sind als 72 Stunden werden gelöscht und wenn ein Ordner bzw Unterordner leer ist (der dann ja auch mindestens so alt ist) wird dieser auch gelöscht. Ist das möglich? Wie ich gerade gemerkt habe, ist wohl das Problem, dass er immer erst die Dateien im innersten Verzeichnis löscht und dann erst im übergeordneten prüft und löscht. Jedoch wird bei den Ordner aus welchen die Dateien gelöscht wurden, durch das löschen ein neues Änderungsdatum gesetzt und somit erfüllen die die Anforderung zum löschen nicht mehr. Gibt es dafür eine lösung? Danke schon mal vorab Lg
Alexander
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
Schabi_Alex schrieb: Bzw. gibt es eine Lösung welche alle Datein löscht die älter sind als 72 Studen?
Gemäß den Rundungsregeln aus der Manpage:
find /home/samba-data/Aufzeichnungen/Cam_Eingang/ -mtime +2 -delete
Wie ich gerade gemerkt habe, ist wohl das Problem, dass er immer erst die Dateien im innersten Verzeichnis löscht und dann erst im übergeordneten prüft und löscht. Jedoch wird bei den Ordner aus welchen die Dateien gelöscht wurden, durch das löschen ein neues Änderungsdatum gesetzt und somit erfüllen die die Anforderung zum löschen nicht mehr. Gibt es dafür eine lösung?
Man kann statt -delete wie schon von Mokkujin in 8995094 vorgeschlagen rm rekursiv löschen lassen:
find /home/samba-data/Aufzeichnungen/Cam_Eingang/ -mtime +2 -exec rm -rf {} \;
Das kann allerdings bei verschachtelten Verzeichnisstrukturen zu ungewollten Löschungen führen, wenn ein übergeordneter Order länger nicht mehr angefasst wurde. Ansonsten könnte man auch im Nachgang nach dem Löschen der Dateien die leeren Verzeichnisse abräumen (je nach erreichter Verzeichnistiefe müsste man das ggf. mehrfach laufen):
find /home/samba-data/Aufzeichnungen/Cam_Eingang/ -empty -delete
|
sebix
Moderator, Webteam
Anmeldungsdatum: 14. April 2009
Beiträge: 5323
|
Willst du eigentlich, dass Ordner unterhalb von /home/samba-data/Aufzeichnungen/Cam_Eingang/ geloescht werden, wenn diese zu alt sind? Wenn ja, wie viele Ebenen?
Oder willst du alte Ordner unabhaengig von der Ebene finden und dann rekursiv loeschen?
|