Gezieltes löschen von Dateien

Hawky

Mitglied
Hi,

Ich bin net so der Linux Profi, daher hab ich eine Frage.

Ich möchte ein Eintrag in der Crontabelle erstellen, der alle 5min ein bestimmtes Verzeichnis überprüft, in welches Bilder abgeleg werden. Er soll nun sobald ein neues bild ankommt das älteste löschen, nur weiß ich net wie ich nach diesen Dateien such (älteste,neuste). Wäre nett, wenn einer von euch mir helfen kann.

Danke
Hawky
 
Hi,
bastle dir ein Shell Skript was dann alle 5 min von deinem Cronjob ausgeführt wird.

In dem Skript sollte ungefähr folgendes drin stehen:

Code:
OLDEST=`ls -t -a | tail -1`  
rm $OLDEST
alle Datein im aktuellen Verz nach dem Zeitstempel geordnet und davon die letzte Zeile,
sprich die älteste Datei, das Ergebniss wird in ne Shell Var geschrieben und der Inhalt deren
dann gelöscht...

oder gleich:
Code:
rm `ls -t -a | tail -1`

Gruß

RedWing
 
Zuletzt bearbeitet:
Hey cool DANKE morgen mal ausprobieren, wenns funktioniert meld ich mich nochmal (natürlich auch wenns nicht geht.)
 
Naja...gehen tuts schon aber evtl. doch nicht so ganz wie ich es gerne hätte ;)

Ich erklär mein Problem nochmal evtl. wirds dann deutlicher:

Ich hab folgende Ordnerstruktur:

Ordner1
-----------2004
------------------Oktober
---------------------------- 07
-----------------------------08

Und jeden Tag um 0uhr wird eine neuer Ordner angelegt, morgen wäre es dann "09" ->

Ordner1
----------- 2004
-------------------Oktober
-------------------------------07
-------------------------------08
-------------------------------09

Jetz möchte ich aber das er "07" löscht, sobald der Ordner "09" erstellt wird. (das überprüft er meinetwegen nachts um 2)
Als erstes musser ja den Ordner 07 rekursiv löschen weil Dateien enthalten sind, das ist mir bewusst!

Ein weiteres Problem ist, dann wenn ein neuer Monat (November) beginnt, dann hab ich noch den Ordner vom Oktober der ja auch noch da ist...

Ich bin etwas verzweifelt ^^
 
Zuletzt bearbeitet:
Hi,

also das kpl. Script schreibe ich dir nicht... aber folgendes kannst du z.B. nutzen und um den alten Monat zu löschen:

Code:
#!/bin/sh
VERZ="Ordner1/"
alterMONAT=`date -d '1 month ago' +%B`
for X in `ls -lR $VERZ`
do
	if [ $X == $alterMONAT ]
	then
		# alten monat gefunden, also loeschen
		echo "$X kann man loeschen"
	fi
done

Aber du solltest beachten, das Linux zwar mit date -d '1 month ago' (oder auch '1 day ago') zurecht kommt, aber z.B. AIX nicht!
 
Also so wies aussieht scheint es nicht zu funktionieren :(

Ich mag zu blöd dazu sein, aber ich muss es halt machen

Code:
#!/bin/sh
VERZ="ftmp/Bahnhof2/2004/"
alterMONAT=`date -d '1 month ago' +%B`
for X in `ls -lR $VERZ`
do
	if [ $X == $alterMONAT ]
	then
		#rm -R $X
		touch $X.txt
	fi
done

: bad interpreter: No such file or directoryn/sh

Das kommt als Fehler
 
Hawky hat gesagt.:
: bad interpreter: No such file or directoryn/sh

Das kommt als Fehler

Hi,

dann liegt deine Shell eben nicht unter /bin/sh! Finde den Pfad zu deiner Shell (z.B. mit which sh) und ändere die erste Zeile passend ab (z.B. #!/usr/bin/sh o.ä.), dann ist der Fehler weg.
 
Hab ich eben auch gemerkt :) ging erst nachdem ich '#' weggemacht habe

naja trotzdem bringter nochn fehler

: No such file or directory !/bin/sh
'/clean_up_month_2: line 5: syntax error near unexpected token `do
'/clean_up_month_2: line 5: `do


obwohl meine Shell unter /bin/sh lliegt
 
Hi,

abgesehen davon, das die erste Zeile ein # enthalten sollte (s.a. Wikipedia) solltest du darauf achten Backticks ` ` zu setzten und nicht Singlequotes ' ' bei
Code:
for X in `ls -lR $VERZ`
Dann sollte es gehen.
 
Zurück