Script zum Löschen von Files mit Datum von - bis ?

Hallo Unix-Kollegen,

jetzt stehe ich auf dem Schlauch: obwohl ich schon viele Unix-Scripts geschrieben habe, finde ich hier nicht mal einen vernünftigen Ansatz. Die Aufgabe ist:

Wir haben viele Produktionsfiles. Solche mit einer bestimmten Buchstabenkombination im Namen und mit einem Datum „von“ bis zu einem Datum „bis“, das auch über Monats- und Jahresgrenzen von „von“ entfernt sein kann, sollen gelöscht werden.

Geht sowas überhaupt mit Unix (Solaris) allein oder braucht man noch awk/perl? Hat schon jemand sowas gemacht oder sonst eine gute Idee?

Gruss, Rupert

Hallo Rupert,

Wir haben viele Produktionsfiles. Solche mit einer bestimmten
Buchstabenkombination im Namen und mit einem Datum „von“ bis
zu einem Datum „bis“, das auch über Monats- und Jahresgrenzen
von „von“ entfernt sein kann, sollen gelöscht werden.

Ich würde so anfangen (ziemliche Frickelei):

  1. Den Zeitraum in UNIXzeit bestimmen in dem die Daten gelöscht werden sollen z.B. vom 1.1.2001 bis 1.1.2003
    Das wäre dann

    martin@cleopatra:~> date -d „1 Jan 2001“ +%s
    von=978303600
    martin@cleopatra:~> date -d „1 Jan 2003“ +%s
    bis=1041375600

  2. Dann eine Liste aller Dateien mit dem Suchstring erstellen
    find /dir -ls | egrep „regex“ | awk ‚{print $8 $9 $10 $11}‘
    die Ausgabe sieht dann so aus:

    208 Nov 30 2001 ./.dvipsrc
    Dez 11 09:31 ./sendmail.tar.gz

Aus der Ausgabe das Datum rausparsen, mit dem Zeitraum abgleichen und ggf. löschen.

for i in `awk '{print $0}'
do
 echo $i | awk '{print $1 $2 $3}' | egrep "\*:\*"
 if [$? = 0]; then
 fTime=`echo $i | awk '{print $2 $1" 2003"}'`
 else
 fTime=`echo $i | awk '{print $2 $1 $3}'`
 fi
 if [`date -d "$fTime"` -lt $bis && `date -d "$fTime"` -gt $bis]; then
 rm `echo $i | awk '{print $4}'`
 fi
done

Geht sowas überhaupt mit Unix (Solaris) allein oder braucht
man noch awk/perl? Hat schon jemand sowas gemacht oder sonst
eine gute Idee?

Ob die Idee gute ist wage ich zu bezweifeln…aber es sollte funktionieren.

Grüße
Martin

Hallo Martin,

vielen Dank fuer Deine Ueberlegungen. Ich habe sie eingehend studiert und ich glaube, dass ich so auch vorwaerts gekommen waere.
In der Zwischenzeit habe ich nach einem passenden Loeschbefehl gesucht und bin auf
find $dir -name „*$pat*“ -mtime +$neu -mtime -$alt -exec rm {} ;
gestossen. Damit, so habe ich probiert, kann ich ausgewaehlte Dateien in einem Verzeichnis zwischen zwei Zeitgrenzen loeschen.
Diese Zeitgrenzen sind die Anzahl Tage seit heute. Was ich also dazu noch brauchte, war ein Programm, das die Zeit in Tagen zwischen zwei eingegeben „Datums“ errechnet. Und dazu habe ich Google befragt und bin auf
http://books.dreambook.com/dfrench/scripts.html
fuendig geworden. Es gibt da ein Script date_diff, das dieses Problem loest. Und nach einigen Umbauarbeiten (deutsche Ausgaben, usw.) bin ich jetzt fast fertig mit der Loesung.

Nochmals danke und Gruesse von einem Muenchner aus der Schweiz
Rupert

Hallo Rupert,

ich wusste doch, dass es einfacher geht :wink:
Hatte mir auch kurz die find-Option mtime angeschaut aber nicht weiter recherchiert, wie man komfortabel den Zeitraum bestimmen kann. So ist es natürlich weit aus einfacher.

Grüße
Martin