PDA

View Full Version : Alte IFS-Dateien löschen



cbe
11-04-08, 10:29
Hallo allerseits,

wir haben eine Anwendung, die ständig temporäre Dateien in ein IFS-Verzeichnis stellt.
Diese würde ich gerne automatisch löschen, und zwar wenn sie z.B. 1 Woche alt sind.

Hier im Forum gibt es oft genial-einfache Lösungen, auf die man als Einzelkämpfer nicht kommt. Hat jemand eine Idee?
Sonst müsste ich klassisch drangehen (Alle Dateien listen und anschließend abh. vom Datum entscheiden ob zu löschen oder nicht)

Gruß,
Christian

Fuerchau
11-04-08, 11:01
Am einfachsten ist hier wieder die QSH:

ls -lT

listet die Dateien auf mit ihrem Erstelldatum (ls -luT <= mit letztem Zugriff).
Diese Ausgabe kann man in eine PF umleiten und per Programm dann auslesen.
Das Datumformat ist etwas gewöhnungbedürftig, man kann es aber auswerten um dann per DEL die Datei zu löschen.

Mann kann es auch mit C-Funktionen machen. Allerdings ist das etwas komplizierter um ein Verzeichnis auszulesen.

In einer STAT-Structur steht das Datum dann in Sekunden seit 1.1.1970. Per C-Funktion localtime() bekommt man das dann wieder in eine neue Struktur (tm) mit Datumsauflösung.

cbe
11-04-08, 12:13
also doch programmieren - schade.

Trotzdem danke,
ls ist sicher einfacher auszuwerten als dsplnk oder sowas.

Gruß,
Christian

Fuerchau
11-04-08, 14:36
Mit etwas Mühe kann man ein QSH-Script daraus machen:

echo "Text" >MyTextFile;
touch -t YYMMDD MyTextFile;

ls | (
while read FileName;
do
if (test $FileName -ot MyTextFile) then
rm $FileName;
fi;
done;
)

YYMMDD sollte vorher als "Heute" - 7 Tage berechnet werden können.

BenderD
11-04-08, 14:49
das ist eine Unix Frage - wenn ich meinem Unix Buch und meinen (bescheidenen) Unix Kenntnissen trauen darf, dann sollte
find /meinPfad -ctime +n -exec rm {} \;
das können.
- meinPfad kann auch ein Muster enthalten
- n ist die Anzahl der Tage seit letzter Änderung
- Vorsicht: arbeitet auch Unterverzeichnisse ab und ist immens mächtig, gut testen!!!
Starten kann man das auch von OS/400 mit QSH CMD('dueddelidue')

D*B



Hallo allerseits,

wir haben eine Anwendung, die ständig temporäre Dateien in ein IFS-Verzeichnis stellt.
Diese würde ich gerne automatisch löschen, und zwar wenn sie z.B. 1 Woche alt sind.

Hier im Forum gibt es oft genial-einfache Lösungen, auf die man als Einzelkämpfer nicht kommt. Hat jemand eine Idee?
Sonst müsste ich klassisch drangehen (Alle Dateien listen und anschließend abh. vom Datum entscheiden ob zu löschen oder nicht)

Gruß,
Christian

cbe
11-04-08, 17:27
find /meinPfad -ctime +n -exec rm {} \;
...
QSH CMD('dueddelidue')

Ha!

genau an so was dachte ich,
klasse, danke!
:)

andwaw
24-04-08, 10:03
Hallo,
Ich will die Dateien nicht nach erstelldatum sondern nach letztem zugriff löschen und habe folgenden Script benutzt, allerdings kommt immer ein Fehler.

cd /LANSA_dcxpgmlib/AS2/as2log/siemsisas2/outbound/
echo "Text" >MyTextFile;
touch -t 02290000 MyTextFile;
ls |(
while read FileName;
do
echo $FileName;
if (test $FileName -luT MyTextFile) then
echo "Lösch - Dummy"
fi;
done;
)
rm MyTextFile





Fehlermeldung:

test: 001-0062 Syntaxfehler beim Auswerten eines Ausdrucks: Primärzahl nicht gefunden.:confused:

Fuerchau
24-04-08, 13:06
Wenn der Dateiname ggf. Leerzeichen enthält, ist die Variable in doppelte Anführungszeichen zu setzen:

if (test "$FileName" -luT MyTextFile) then