Dateien zeitgesteuert löschen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
timee
Beiträge: 13
Registriert: 09.03.2009 10:36:57

Dateien zeitgesteuert löschen

Beitrag von timee » 04.09.2009 11:06:11

Hallo,

ich möchte mit cronjob ein script starten welches mir einmal am Tag einen festgelegten Ordner durchgeht und Dateien löscht, deren letzter Zugriff über 30 tage her ist.
Die Einstellung in cronjob ist kein Problem, aber ich habe keine Ahnung wie das script aussehen muss.
Könnte mir da event. jemand helfen?
#30 Tage in UNIX Time sind 2592000 Sekunden
$timelimit = 2592000
#Ordner der durchsucht werden soll
$path = ".../ordner"
#Wenn letzter Dateizugriff kleiner als aktuelle UNIX time - 30 Tagelimit dann löschen
......
THX
Timee

michaels
Beiträge: 1164
Registriert: 29.03.2009 18:12:25

Re: Dateien zeitgesteuert löschen

Beitrag von michaels » 04.09.2009 11:13:25

Hallo,

evtl. so:

Code: Alles auswählen

find $path -mtime +30 -exec rm {} \;
Gruß

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Re: Dateien zeitgesteuert löschen

Beitrag von nepos » 04.09.2009 11:17:10

Du musst find benutzen:

Code: Alles auswählen

find /verzeichnis -ctime +30 -exec rm {} +
Statt -ctime kannst du eventuell auch -mtime benutzen.
Das + bei -exec heisst, dass er die Liste der gefundenen Dateien an rm übergibt.
Vorteil ist, dass nicht für jede gefundene Datei ein separates rm aufgerufen wird.
Alternativ kannst du das auch so schreiben:

Code: Alles auswählen

find /verzeicnis -ctime +30 | xargs rm

uname
Beiträge: 12467
Registriert: 03.06.2008 09:33:02

Re: Dateien zeitgesteuert löschen

Beitrag von uname » 04.09.2009 11:18:54

Was ist denn mit "atime"?

Code: Alles auswählen

man find
Im übrigen würde ich "xargs" dem "exec" aus Performance-Gründen vorziehen.

Benutzeravatar
pinguino
Beiträge: 147
Registriert: 23.01.2007 23:11:46

Re: Dateien zeitgesteuert löschen

Beitrag von pinguino » 04.09.2009 11:25:19

mtime : "modified file in ....hours"
ctime: "created file in .... hours"
atime: "acceded file in ... hours"
Gruß

Pinguino

>>Nota bene<<

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Re: Dateien zeitgesteuert löschen

Beitrag von nepos » 04.09.2009 11:29:02

pinguino hat geschrieben:ctime: "created file in .... hours"
Nein, das ist falsch:
-ctime n
File’s status was last changed n*24 hours ago. See the comments for -atime to understand how rounding affects the interpretation of file status change times.
Ausserdem sind -ctime, -atime, -mtime alle mit n*24 Stunden, sprich Tage.

michaels
Beiträge: 1164
Registriert: 29.03.2009 18:12:25

Re: Dateien zeitgesteuert löschen

Beitrag von michaels » 04.09.2009 11:44:02

Ich würde einfach sagen:

Code: Alles auswählen

man find
Besser/ausführlicher findet man es wohl nicht...

Benutzeravatar
pinguino
Beiträge: 147
Registriert: 23.01.2007 23:11:46

Re: Dateien zeitgesteuert löschen

Beitrag von pinguino » 04.09.2009 11:52:48

was bedeutet dann Dateistatus?
Gruß

Pinguino

>>Nota bene<<

timee
Beiträge: 13
Registriert: 09.03.2009 10:36:57

Re: Dateien zeitgesteuert löschen

Beitrag von timee » 04.09.2009 11:58:39

Also wenn ich die Antworten nun richtig deute, sollte der Befehl nun so aussehen:
find /usr/backup/ -atime +30 | xargs rm
Bedeutet die +30 nun, dass er alles löscht was 30 Tage und älter ist oder nur was älter als 30 Tagen ist also ab 31?

THX


edit:
man find besagt
-atime N
auf die Datei ist vor N*24 Stunden zugegriffen worden
also sollte es so passen oder ?

Benutzeravatar
pinguino
Beiträge: 147
Registriert: 23.01.2007 23:11:46

Re: Dateien zeitgesteuert löschen

Beitrag von pinguino » 04.09.2009 12:05:14

als Beispiel habe ich folgendes gemacht. Ich habe folgende Datei. Im Terminal:

Code: Alles auswählen

stat test.key
  File: „test.key“
  Size: 488       	Blocks: 8          IO Block: 4096   reguläre Datei
Device: 306h/774d	Inode: 181278      Links: 1
Access: (0777/-rwxrwxrwx)  Uid: ( 1000/  user)   Gid: ( 1000/  user)
Access: 2009-09-04 11:57:00.000000000 +0200
Modify: 2009-05-30 16:12:53.000000000 +0200
Change: 2009-05-30 16:12:53.000000000 +0200
wenn ich die Rechte ändere, dann sieht das so aus:

Code: Alles auswählen

stat test.key
  File: „test.key“
  Size: 488       	Blocks: 8          IO Block: 4096   reguläre Datei
Device: 306h/774d	Inode: 181278      Links: 1
Access: (0777/-rwxrwxrwx)  Uid: ( 1000/  user)   Gid: ( 1000/  user)
Access: 2009-09-04 11:57:00.000000000 +0200
Modify: 2009-05-30 16:12:53.000000000 +0200
Change: 2009-09-04 11:59:45.000000000 +0200
EDIT

wenn ich den Befehl "stat" ausgeführt habe, dann hat sich "Access" geändert und "Change" wenn ich die Rechte geändert habe, damit es klar ist. "Modify" als Schlußfolgerung ist nur, wenn der Inhalt der Datei sich geändert hat.
Gruß

Pinguino

>>Nota bene<<

uname
Beiträge: 12467
Registriert: 03.06.2008 09:33:02

Re: Dateien zeitgesteuert löschen

Beitrag von uname » 04.09.2009 12:18:48

Code: Alles auswählen

find /usr/backup/ -atime +30 | xargs rm
Zum üben solltest du besser "rm" durch "echo" ersetzen:

Code: Alles auswählen

find /usr/backup/ -atime +30 | xargs echo

timee
Beiträge: 13
Registriert: 09.03.2009 10:36:57

Re: Dateien zeitgesteuert löschen

Beitrag von timee » 04.09.2009 12:22:29

Hab etwas mit diesem Befehl geübt und die Ergebnisse sehen gut aus.
Werde ihn nun mal zum testen jetzt so in cron verwenden:

Code: Alles auswählen

find /usr/backup/ -atime +30 -type f | xargs /bin/rm -f
danke für die hilfen
Timee

Antworten