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
 

RedWing

Erfahrenes Mitglied
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:

Hawky

Mitglied
Hey cool DANKE morgen mal ausprobieren, wenns funktioniert meld ich mich nochmal (natürlich auch wenns nicht geht.)
 

Hawky

Mitglied
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:

imweasel

Erfahrenes Mitglied
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!
 

Hawky

Mitglied
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
 

imweasel

Erfahrenes Mitglied
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.
 

Hawky

Mitglied
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
 

imweasel

Erfahrenes Mitglied
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.
 

Neue Beiträge