PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Automatisches Löschscript mit Ausnahmen



Sanches
12.07.2004, 14:04
Hallo zusammen,

ich versuche mir gerade ein Script zusammenzubasteln,
das mir Daten, die älter als ein bestimmtes Zeitfenster sind, löscht.

z.B. mit folgendem Script:
find /"bestimmter-pfad" -mtime +14 -exec rm {} \;

Ich suche jedoch noch eine Erweiterung, die es mir erlaubt,
das ich z.B bestimmte Verzeichnisse (Namen!) nicht durchsuche und somit lösche! :evil:

Weis hierfür jemand einen Rat / Tip ??? ?(

Gruss Sanches

rup
12.07.2004, 16:54
find /"bestimmter-pfad" -not -regex "\./pfad/.*" -mtime +14 -exec rm {} \;

Edit: Ich hab .* am Ende des Pfades vergessen.

Sanches
15.07.2004, 10:18
Danke rup!

Jedoch geht das Script nicht! :(

folgenden Aufruf habe ich verwendet:

find /tmp/test -not -regex "\./allgemein/.*" -atime -14 -exec rm {} \;

In meinem Test habe ich zurvor Dateien und Verz. mit unterschiedlichem Datum erstellt! Jedoch versucht er jedes mal ALLES zu löschen - egal wie alt!

Abgesehen davon muss man noch die Änderung ... rm -r {} ... machen,
da er sonst keine Verz. löscht.

@rup: Hat das Script bei dir funktioniert???

MfG Sanches

rup
16.07.2004, 23:03
Hallo Sanches,

tut mir leid, ich hab den Befehl nur ganz kurz im aktuellen Verzeichnis (.) suchen lassen und deshalb bei dem Regex natuerlich mit \./ (Punkt ohne vorherigen Backslash wuerde jedes Zeichen ausser Zeilenumbruch abdecken) begonnen.
z.B. find . -not -regex "\./xyz"
Wenn du bei find nicht im aktuelle Verzeichnis suchst musst du den ganzen Pfad im regex angeben.
find /tmp/test -not -regex "/tmp/test/allgemein.*"

Wenn du mit rm -r loeschen willst, darfst du in dem Ausdruck nach dem Verzeichnis allgemein keinen Slash machen, da sonst das ganze Verzeichnis geloescht wuerde.
Versuch es einfach mal ohne Loeschbefehl:
find /tmp/test -not -regex "/tmp/test/allgemein.*" :]
find /tmp/test -not -regex "/tmp/test/allgemein/.*" X(

Dein Befehl sollte so funktionieren:
find /tmp/test -not -regex "/tmp/test/allgemein.*" -atime -14 -exec rm {} \;

Gruss Rupert

Sanches
19.07.2004, 14:43
Hallöchen,

@rup: ich hab jetzt mal verschiedenes versucht:

1.) folgenden Aufruf:
find /tmp/sebo -not -regex "/tmp/sebo/allgemein.*"

folgende Ausgabe erfolgte nun:
/tmp/sebo
/tmp/sebo/1
/tmp/sebo/1/11
/tmp/sebo/1/12
/tmp/sebo/1/test.txt
/tmp/sebo/1/text2.txt
/tmp/sebo/4
/tmp/sebo/4/44
/tmp/sebo/4/41
/tmp/sebo/2
/tmp/sebo/2/hallo.txt
/tmp/sebo/3
/tmp/sebo/3/Verzeichnis
/tmp/sebo/3/Verzeichnis/asdasdas
/tmp/sebo/3/Verzeichnis/Verzeichnis

=> soweit alles im grünen Bereich! :D :D :D
die Verzeichnisse 1 + 4 sind mit heutigem Datum (19.07!)
die Verzeichnisse 2 + 3 sind mit dem Datum "19.06"
Die verschienden Dateien sind mit unterschiedlichen Datum versehen!

bei dieser Ausgabe wird das Verzeichnise "allgemein" ausgelassen => so solls auch sein!!! :tongue:

2.) nun diesen Aufruf getestet:

find /tmp/sebo -not -regex "/tmp/sebo/allgemein.*" -atime -14 -exec rm {} \;

bei diesem Aufruf wird meine gesamte Struktur gelöscht! (wenn ich noch rm -r verwende!!!) :(

d.h. der Fehler bei diesem Script liegt leider in der Zeiangabe! ansonst funzt alles! Er überspringt die, die er soll. Bei den restlichen Daten hat er Probleme mit den Zeitangaben!

Leider habe ich hier auch schon mit atime & mtime versucht -> geht auch net!

Ich verzweifel langsam ... ;( ;( ;(

Gruss Sanches

rup
19.07.2004, 17:01
Ja, das erste Verzeichniss muss man auch noch ausnehmen:

find /tmp/test -not -regex '/tmp/test' -not -regex "/tmp/test/allgemein.*" -atime -14 -exec rm {} \;