-----Original Message----- From: Al Bogner [mailto:suse-linux@ml.pinguin.uni.cc] Sent: Friday, September 12, 2003 1:20 PM To: suse-linux@suse.com Subject: alte Dateien loeschen
Ich überlege mir, wie ich am einfachsten nicht mehr benötigte Dateien löschen kann.
Die 1. Datei soll in eine Variable geschrieben werden und dann in ein anderes Verzeichnis kopiert werden.
Die 2.-4. Datei soll zB erhalten bleiben und ab der 5. Datei sollen alle gelöscht werden.
Hat wer bitte Hinweise dazu? Vielleicht kann man das auch besser organisieren. Die Datei lege ich deswegen an, um ein Log zu haben, was vorhanden war.
Schon mal an "logrotate" gedacht? Gruß Jan
Am Freitag, 12. September 2003 13:24 schrieb Jan.Albrecht@bertelsmann.de:
Schon mal an "logrotate" gedacht?
Damit komme ich nicht weiter. Die gz-Dateien waren nur als Beispiel gedacht. Wichtig ist mir das Auslesen der _neusten_ Datei nach Filepatterns. Al -- Infos zu Softwarepatenten: http://swpat.ffii.org/index.de.html http://petition.eurolinux.org/index.html?LANG=de
Am Fre, 2003-09-12 um 13.35 schrieb Al Bogner:
Damit komme ich nicht weiter. Die gz-Dateien waren nur als Beispiel gedacht. Wichtig ist mir das Auslesen der _neusten_ Datei nach Filepatterns.
Hallo, ich weiß nicht, ob ich Dich richtig verstanden haben, aber wenn Du jeweils die neueste Datei jeder "Sorte" nicht löschen willst, vielleicht so: for loeschpat in '*.gz' '*.doc' 'wasweisich.*' do # loeschpat sollte jetzt das 1. - n. Muster enthalten wg ' namenliste=`ls -t $loeschpat` erster=0 for loeschname in $namenliste do if [ $erster -eq 0 ] then erster = 1 else rm -f $loeschname fi done done *nicht getestet und nur so aus dem Kopf als Idee* Gruß, Wolfgang
Am Freitag, 12. September 2003 14:11 schrieb Wolfgang Hinsch:
Damit komme ich nicht weiter. Die gz-Dateien waren nur als Beispiel gedacht. Wichtig ist mir das Auslesen der _neusten_ Datei nach Filepatterns.
for loeschpat in '*.gz' '*.doc' 'wasweisich.*' do # loeschpat sollte jetzt das 1. - n. Muster enthalten wg ' namenliste=`ls -t $loeschpat` erster=0 for loeschname in $namenliste do if [ $erster -eq 0 ] then erster = 1 else rm -f $loeschname fi done done
Was gibt es für eine simple Möglichkeit die _neueste_ Datei, das ist also die 1. Zeile von ls -1t in eine Variable zu bekommen? Al -- Infos zu Softwarepatenten: http://swpat.ffii.org/index.de.html http://petition.eurolinux.org/index.html?LANG=de
Al Bogner wrote:
Was gibt es für eine simple Möglichkeit die _neueste_ Datei, das ist also die 1. Zeile von ls -1t in eine Variable zu bekommen?
TESTVAR=`/bin/ls -lt|/usr/bin/gawk '{if (NR==2) print $9}'` echo $TESTVAR Nur mal so schenll geschrieben, die erste Zeile ist "total..." also die zweite Zeile. -- Andreas
Am Freitag, 12. September 2003 19:13 schrieb Andreas Winkelmann:
Was gibt es für eine simple Möglichkeit die _neueste_ Datei, das ist also die 1. Zeile von ls -1t in eine Variable zu bekommen?
TESTVAR=`/bin/ls -lt|/usr/bin/gawk '{if (NR==2) print $9}'` echo $TESTVAR
Danke Andreas, das bringt mich schon mal weiter, ich verstehe aber noch nicht, warum das Ergebnis nicht stimmt, wenn ich eine Wildcard setze, zB: TESTVAR=`/bin/ls -lt *.txt |/usr/bin/gawk '{if (NR==2) print $9}'` Al -- Infos zu Softwarepatenten: http://swpat.ffii.org/index.de.html http://petition.eurolinux.org/index.html?LANG=de
Al Bogner wrote:
Was gibt es für eine simple Möglichkeit die _neueste_ Datei, das ist also die 1. Zeile von ls -1t in eine Variable zu bekommen?
TESTVAR=`/bin/ls -lt|/usr/bin/gawk '{if (NR==2) print $9}'` echo $TESTVAR
Danke Andreas, das bringt mich schon mal weiter, ich verstehe aber noch nicht, warum das Ergebnis nicht stimmt, wenn ich eine Wildcard setze, zB:
TESTVAR=`/bin/ls -lt *.txt |/usr/bin/gawk '{if (NR==2) print $9}'`
Weil dann die erste Zeile "total..." fehlt, also musst Du (NR==1) schreiben. -- Andreas
Hallo Andreas, hallo Al, hallo Leute, Am Freitag 12 September 2003 19:13 schrieb Andreas Winkelmann:
Al Bogner wrote:
Was gibt es für eine simple Möglichkeit die _neueste_ Datei, das ist also die 1. Zeile von ls -1t in eine Variable zu bekommen?
TESTVAR=`/bin/ls -lt|/usr/bin/gawk '{if (NR==2) print $9}'`
Uff, wieso so umständlich? Erst lässt Du ls alle Angaben zur Datei ausgeben und dann filterst Du nur den Dateinamen heraus? Dann besser gleich ls -1t verwenden, wie Al auch schon geschrieben hat ;-)
echo $TESTVAR
Quoting nicht vergessen, sonst kann das ins Auge gehen! cb@tux:/tmp/tmp-cb/test> touch dumm_gelaufen cb@tux:/tmp/tmp-cb/test> touch 'd*' cb@tux:/tmp/tmp-cb/test> ls -1t d* dumm_gelaufen cb@tux:/tmp/tmp-cb/test> test="`ls -1t |head -n1`" cb@tux:/tmp/tmp-cb/test> echo $test d* dumm_gelaufen cb@tux:/tmp/tmp-cb/test> echo "$test" d*
Nur mal so schenll geschrieben, die erste Zeile ist "total..." also die zweite Zeile.
Knapp vorbei ist auch daneben. Al verwendet ls -1t, nicht ls -lt Das liefert nur die Dateinamen und verzichtet auf die "total"-Zeile. Aber auch für das Herausfiltern der zweiten Zeile ist awk mit if-Abfrage bei jeder Zeile ein wenig Overhead, IMHO ;-) Für das Ermitteln der zweiten Zeile würde ich ls -1t | sed -n '2p' verwenden. Da hier aber die erste Zeile gefragt ist, reicht ein einfaches ls -1t | head -n1 Gruß Christian Boltz --
He Mann, isse krasse, erste Wort: "Kyptographie", isse schon falsch. Was machst du? Uuuhhh. Ist in der Listenkasse noch genug Geld für ein Wörterbuch? [> Ratti und Thorsten Haude in sl-etikette]
Christian Boltz wrote:
Was gibt es für eine simple Möglichkeit die _neueste_ Datei, das ist also die 1. Zeile von ls -1t in eine Variable zu bekommen?
TESTVAR=`/bin/ls -lt|/usr/bin/gawk '{if (NR==2) print $9}'`
Uff, wieso so umständlich? Erst lässt Du ls alle Angaben zur Datei ausgeben und dann filterst Du nur den Dateinamen heraus? Dann besser gleich ls -1t verwenden, wie Al auch schon geschrieben hat ;-)
;-)) Stimmt, jetzt wo Du es sagst, sehe ich die "1" auch. Hatte ein "l" gelesen. Vielleicht sollte ich mir doch mal ne Brille kaufen ;-)) -- Andreas
Hallo, Am Fri, 12 Sep 2003, Al Bogner schrieb:
Was gibt es für eine simple Möglichkeit die _neueste_ Datei, das ist also die 1. Zeile von ls -1t in eine Variable zu bekommen?
variable="`ls -t | head -n 1`" Das '-1' ist ueberfluessig. Ich wuerde uebrigens sowas machen, wenn du mit den ersten n-Dateien was anderes als mit dem Rest machen willst: i=0 ls -t | while read f; do i=$[i+1] case $i in 1) machwas_mit_der_ersten_datei;; 2|3|4|5) machwas_mit_2_bis_5;; *) machwas_mit_allen_anderen;; esac done -dnh --
Kommentiere [..] die Zeile [..] aus, indem Du ein Kanalgitter # davor setzt. Erzähl hier nix falsches! Das ist kein Kanalgitter, sondern ein Gartenzaun! [> Adalbert Michelic und Ratti in suse-linux]
participants (6)
-
Al Bogner
-
Andreas Winkelmann
-
Christian Boltz
-
David Haller
-
Jan.Albrecht@bertelsmann.de
-
Wolfgang Hinsch