• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Alte Dateien löschen

Hallo,
ich habe in einem Verzeichniss viele Dateien mit dem Format Backup_YYYYmmdd.tar.bz2, wobei natürlich YYYYmmdd dem aktuellen Datum entspricht.

Nun möchte ich alle Dateien löschen, die vom Dateinamen her älter als 4 Wochen sind.

Wie kann ich das am einfachsten bewerkstelligen?

Grüße
Philipp
 
Du hast nur den Dateinamen? oder passen auch die time-Attribute (a, m, c)? denn dann könnte man das einfach mit einem Find machen, aber so muss man eine eigene Logik definieren (Stringmatching)
 
:)
Haveaniceday
Code:
#!/bin/bash
DELDATE=`date -d "now -4 week" "+%Y%m%d"`
export DELDATE
find . -name "Backup_????????.tar.bz2"  | while read name
do
        FILEDATE=${name##.*Backup_}
        FILEDATE=${FILEDATE%.tar.bz2}
        echo $FILEDATE $DELDATE
        if [ $FILEDATE -le $DELDATE ]
        then
                echo delete $name
        else
                echo no delete of $name
        fi
done

Edit: Leerzeichen zwischen "-" und "4" entfernt. Probleme mit SLE 8 !
 
Danke schön!

kannst du mir schnell erklären, wie das funktioniert:

FILEDATE=${name##.*Backup_}
FILEDATE=${FILEDATE%.tar.bz2}

Wofür stehen z.B. die beiden #?

Grüße
Cletus
 
man bash erklärt dieses komplett. Dort ist es aber für mich fast unverständlich beschrieben...

FILEDATE=${name##.*Backup_}

Alles vor und einschließlich ".*Backup_" aus der Variable "name" wird gelöscht und der Rest in die Variable FILEDATE geschrieben.
Syntax: ${variable##pattern}


FILEDATE=${FILEDATE%.tar.bz2}

Alles <pattern> am Ende wird entfernt Syntax: ${variable%pattern}

Diese Art von Variablenbearbeitung wird oft übersehen und mit anderen
externen Programmen gemacht. Dabei kann die Shell das so bequem und
schnell...

Dieses hatte ich mal für mich ausprobiert und mir aufgeschrieben:
Change "extention" of a variable:

shell# a=replace/etc/replace/passwd.replace ; b=${a//replace/by} ; echo $b
by/etc/by/passwd.by

shell# a=replace/etc/replace/passwd.replace ; b=${a//#replace/by} ; echo $b
by/etc/replace/passwd.replace

shell# a=replace/etc/replace/passwd.replace ; b=${a//%replace/by} ; echo $b
replace/etc/replace/passwd.by

shell# a=/part1/part2/part3/part4.part5 ; b=${a##*/} ; echo $b
part4.part5

shell# a=/part1/part2/part3/part4.part5 ; b=${a#*/} ; echo $b
part1/part2/part3/part4.part5

shell# a=part1.part2 ; b=${a%.part2} ; echo $b
part1

Viele Grüße,

Haveaniceday

TeXpert schrieb:
exakt, nur das export DELDATE ist unnötig
Ist zwar nicht nötig. Hilft aber bei Erweiterungen, wenn die Variable
z.B. in awk über ENVIRON["DELDATE"] abgefragt würde.
:)
 
haveaniceday schrieb:
Code:
DELDATE=`date -d "now - 4 week" "+%Y%m%d"`
now - 4 week liefert bei mir ( SLES 8 ) das aktuelle Datum PLUS 4 Wochen.
Code:
~> date
Die Jun 28 13:02:12 CEST 2005
~> date -d "now - 4 week" 
Die Jul 26 13:02:17 CEST 2005
~> date -d "now -4 week"   
Die Mai 31 13:02:26 CEST 2005
~> date -d "-4 week"    
Die Mai 31 13:02:30 CEST 2005
 
Dann entferne ich oben mal ganz schnell das Leerzeichen zwischen
- und 4
Code:
haveaniceday@speedy:~> date -d "now - 4 week" "+%Y%m%d"
20050531
haveaniceday@speedy:~> date -d "now -4 week" "+%Y%m%d"
20050531
haveaniceday@speedy:~> date -d "now -4 week" "+%Y%m%d"
20050531

Bei SuSE 9.3 geht es auch mit "Leerzeichen".

Edit:
Oops, mit Leerzeichen geht es erst seit 9.3 !
Getestet und gibt mit Leerzeichen den "falschen" Wert: 6.3, 7.0, 8.2, 9.0, 9.1,9.2

Edit2: Hab mal ne PN an Cletus gesendet bevor er seine Backup schrotet und den Thread nicht auf Benachrichtigung hat...
 
Nee, hab ein paar alte Rechner als User im Zugriff.

Ist aber alles im geschlossen Netz. Einmal aufgesetzt, läuft,
never touch a running system....
 
"Never touch a running system"
Das ist so ziemlich der schäbigste Spruch, den ich kenne.

Spielt ihr keine Updates ein?
 
Es wird schwierig z.B. für 6.3, 7.0, 8.2 Updates zu finden.
Wenn ein Rechner nicht sicherheitskritisch ist und alle erforderlichen
Funktionen absolut erfüllt wird nichts gemacht.

Das minimiert auch den Platz für Backups..

Da würde es sich eher lohnen eine komplett neue Version zu nutzen.

Haveaniceday

PS: persönlich mache ich sehr oft zu frühe updates...:roll: Aber das ist
eher Spass am Spiel, wenn ich mal den Zeitaufwand dafür betrachte..
 
Satan,
bist du des Wahnsinns? 6.3?

Hauptsache es wird nicht sicherheitskritisch für die anderen Systeme.
 
Oben