Löschen von alten files (backupscript)

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
tachyon
Beiträge: 11
Registriert: 11.12.2004 15:23:39
Wohnort: wien
Kontaktdaten:

Löschen von alten files (backupscript)

Beitrag von tachyon » 15.02.2005 11:15:55

hallo,
also ich hätte da ein kleines problem, aber es wird mir sicherlich wer helfen können.
ich habe ein script zu einem schlichten backup, und die aufgabe ist,
das dieses script täglich um 0400h ein vollbackup zieht. so weit so gut und dies
funktioniert ja auch tadellos. das problem welches ich habe ist das ein backup
tar.gz file ca. 3gb hat und die 30gb platte schnell voll macht.

meine bitte/frage ... wie kann man mit einer syntax die files die älter 3 tage sind,
löschen.

hier die syntax:
-rw-r--r-- 1 root root 3760904859 Feb 13 04:28 backup.20050213.tar.gz
-rw-r--r-- 1 root root 3789237798 Feb 14 04:29 backup.20050214.tar.gz
-rw-r--r-- 1 root root 1821331456 Feb 15 04:18 backup.20050215.tar.gz

danke für die hilfe ...

br
chris

Benutzeravatar
feltel
Webmaster
Beiträge: 10373
Registriert: 20.12.2001 13:08:23
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Leipzig, Germany
Kontaktdaten:

Beitrag von feltel » 15.02.2005 12:06:24

Aus dem Kopf:

Code: Alles auswählen

find . -type f -name backup.* -daystart -ctime +3 -print0 | xargs rm
sollte gehen.

tachyon
Beiträge: 11
Registriert: 11.12.2004 15:23:39
Wohnort: wien
Kontaktdaten:

Beitrag von tachyon » 15.02.2005 12:52:49

feltel hat geschrieben:Aus dem Kopf:

Code: Alles auswählen

find . -type f -name backup.* -daystart -ctime +3 -print0 | xargs rm
sollte gehen.
danke für die info aber ich bekomme das statement zurück
find . -type f -name backup.* -daystart -ctime +3 -print0 | xargs rm
find: paths must precede expression
Usage: find [path...] [expression]
rm: too few arguments
??? (obwohl ich mir denke das das find passt) :)

::EDIT: ermeckert das find an, das backup.* passt ihm nicht
aber er findet nicht die files :?:

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

Beitrag von nepos » 15.02.2005 13:13:13

Also bei mir geht der Aufruf, auch wenn er nix findet ;)

Benutzeravatar
feltel
Webmaster
Beiträge: 10373
Registriert: 20.12.2001 13:08:23
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Leipzig, Germany
Kontaktdaten:

Beitrag von feltel » 15.02.2005 13:14:00

Hmmm, probier mal

Code: Alles auswählen

find . -type f -name 'backup.*' -daystart -ctime +3 -print0 | xargs -0 rm
Ich glaube mein erster Tipp hatte zwei Fehler: Das .* wird automatisch durch die Shell expandiert, was natürlich nicht sein darf und zweitens war die Lösung nicht mit alles Dateinamen kompatibel (Spaces im Dateinamen).

tachyon
Beiträge: 11
Registriert: 11.12.2004 15:23:39
Wohnort: wien
Kontaktdaten:

Beitrag von tachyon » 15.02.2005 13:18:18

feltel hat geschrieben:Hmmm, probier mal

Code: Alles auswählen

find . -type f -name 'backup.*' -daystart -ctime +3 -print0 | xargs -0 rm
Ich glaube mein erster Tipp hatte zwei Fehler: Das .* wird automatisch durch die Shell expandiert, was natürlich nicht sein darf und zweitens war die Lösung nicht mit alles Dateinamen kompatibel (Spaces im Dateinamen).
danke - der aufruf geht jeztz .. aber er kann nichts finden :?:
junkie:/home/cp# find . -type f -name 'backup.*' -daystart -ctime +3 -print0
obwohl
junkie:/home/cp# ls -ltr backup.*
-rwxrwxrwx 1 root root 3760904859 Feb 13 04:28 backup.20050213.tar.gz
-rwxrwxrwx 1 root root 3789237798 Feb 14 04:29 backup.20050214.tar.gz
-rwxrwxrwx 1 root root 1821331456 Feb 15 04:18 backup.20050215.tar.gz
für mich sehr dubios ... was sagt eure erfahrung bei sowas ???

::EDIT:
junkie:/home/cp# find . -type f -name 'backup.*'
./backup/wwwdom/spooner/administrator/images/backup.png
./backup/wwwdom/spooner/includes/js/ThemeOffice/backup.png
./backup/www/administrator/images/backup.png
./backup/www/includes/js/ThemeOffice/backup.png
./backup/etc/webmin/mysql/backup.pl
./backup.20050213.tar.gz
./backup.20050214.tar.gz
./backup.20050215.tar.gz
d.h. der daystart syntax hat was ... aber was ?

Benutzeravatar
feltel
Webmaster
Beiträge: 10373
Registriert: 20.12.2001 13:08:23
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Leipzig, Germany
Kontaktdaten:

Beitrag von feltel » 15.02.2005 13:31:38

Der kann noch nix finden, da das älteste File bei Dir vom 13.02. ist und "-daystart -ctime +3" besagt das das File älter als drei Tage sein muss und das volle Tage zählen und nicht bloß Zeit+24h. Bei Dir wird er also erst übermorgen was finden.

Benutzeravatar
feltel
Webmaster
Beiträge: 10373
Registriert: 20.12.2001 13:08:23
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Leipzig, Germany
Kontaktdaten:

Beitrag von feltel » 15.02.2005 13:34:24

Nachtrag. Sehe gerade das Du auch noch ein /backup-Verzeichnis hast mit Files die auch backup.irgendwas heißen. Damit muss der find-Aufruf noch weiter eingegrenzt werden sonst löscht er auch diese Dateien.

Code: Alles auswählen

find . -type f -name 'backup.*.tar.gz' -daystart -ctime +3 -print0 | xargs -0 rm

tachyon
Beiträge: 11
Registriert: 11.12.2004 15:23:39
Wohnort: wien
Kontaktdaten:

Beitrag von tachyon » 15.02.2005 13:44:40

feltel hat geschrieben:Nachtrag. Sehe gerade das Du auch noch ein /backup-Verzeichnis hast mit Files die auch backup.irgendwas heißen. Damit muss der find-Aufruf noch weiter eingegrenzt werden sonst löscht er auch diese Dateien.

Code: Alles auswählen

find . -type f -name 'backup.*.tar.gz' -daystart -ctime +3 -print0 | xargs -0 rm
danke dir ... dürfte anscheinend funzen, da ich es mal kurz mit dem cmin +1 ausprobiert
hab und zuvor ein file mit touch backup.test.tar.gz erzeugt hab.

danke nochmals ... meld mich wenn was nicht geht ... *lol*

tachyon
Beiträge: 11
Registriert: 11.12.2004 15:23:39
Wohnort: wien
Kontaktdaten:

Beitrag von tachyon » 03.03.2005 14:16:00

danke nochmals .. funktioniert ausgezeichnet !!!! :D

Seifenverkäufer
Beiträge: 41
Registriert: 09.07.2004 10:12:33

Beitrag von Seifenverkäufer » 15.12.2005 11:22:59

Moin in die Runde!

Wollte mich an dieser Stelle auch für den Einzeiler bedanken. Habe allerdings noch zwei Fragen dazu:

1.) Wollte das Script gerne mal testen und habe mir mehere Dateien angelegt mit

Code: Alles auswählen

 touch -t 200512120800 squid_sich_2005-12-12
 touch -t 200512130800 squid_sich_2005-12-13
....
Aber damit ändere ich doch AFAIK nur das Datum des letzten Zugriffs, kann ich das auch für die Erstellung angeben, da find ja nach "ctime" sucht?

2.) Kopiere mein Backup-Archiv auf einen Novell-Server. Kann ich die dort liegenden Backupfiles auch mit dem Einzeiler löschen? Erkennt er dort auch die "ctime" ?

Danke und Gruß,

Tyler

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

Beitrag von nepos » 15.12.2005 11:55:29

Es gibt unter Linux kein Erstellungsdatum ;)
atime = Zeitpunkt des letzten Zugriffs auf die Datei
mtime = Zeitpunkt der letzten Aenderung des Inhalts
ctime = Zeitpunkt der letzten Aenderung des Dateistatus
Siehe auch

Code: Alles auswählen

man find

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 15.12.2005 12:18:29

Code: Alles auswählen

toch -t <timestamp> <filename>
ändert zugriff und modifikations zeitpunkt - KEINE änderung des Zeitpunktes an dem der file status sich das letzte mal änderte

In einfachen Worten:
Wird ein File erstellt "ändert" sich dessen Status. Daraus schließt der aufmerksame Leser sogleich, dass man mit ctime oder cmin das richtige Werkzeug hat.

Fazit:
siehe einzeiler von feltel :idea: und evtl. man find

markus

Seifenverkäufer
Beiträge: 41
Registriert: 09.07.2004 10:12:33

Beitrag von Seifenverkäufer » 15.12.2005 13:41:21

Danke für eure Antworten!

Code: Alles auswählen

toch -t <timestamp> <filename>
ändert zugriff und modifikations zeitpunkt - KEINE änderung des Zeitpunktes an dem der file status sich das letzte mal änderte
OK, das habe ich verstanden. Aber wie kann ich denn zum testen am einfachsten den Dateistatus ändern? Sorry für die NOOB-Frage, aber ich habe echt keine Ahnung. Attribute und Berechtigungen ändern hat ja mit dem Status auch nix zu tun, oder?
Danke für eure Hilfe.

Tyler

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 15.12.2005 14:02:45

einfach ein file anlegen

Code: Alles auswählen

toch <newfile>
siehe

Code: Alles auswählen

man touch
dann kannst du find mit cmin oder ctime drauf ansetzen

markus

Antworten