Script soll die letzten 1000 Fotos löschen wenn Ordner>10

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Maverick83
Beiträge: 20
Registriert: 03.12.2007 15:31:57

Script soll die letzten 1000 Fotos löschen wenn Ordner>10MB

Beitrag von Maverick83 » 03.12.2007 15:39:45

Hallo Zusammen

Ich habe ein Programm, dass regelmässig Bilder in den Ordner /tmp/pictures speichert. Die Titel der Dateien sind alle vom Syntax gleich z.B: 2007-11-3-16-4-52.jpg

Nun möchte ich gerne ein Cron Script schreiben, dass jeden Monat prüft ob der Ordner ../pictures >10MB ist, falls ja sollen die letzten 1000 Fotos gelöscht werden.

Wie kann ich das am besten lösen, ich hab noch nicht viel Erfahrung mit Scrips, mit Debian selbst schon.

Danke für eure Hilfe

Michi

Benutzeravatar
ThoRHam
Beiträge: 113
Registriert: 12.11.2006 12:57:33
Lizenz eigener Beiträge: GNU General Public License
Wohnort: Rhein-Main
Kontaktdaten:

Beitrag von ThoRHam » 03.12.2007 20:12:20

Hallo Maverick83,

habe zur Erkennung der Ordner Größe schonmal einen Ansatz:

Code: Alles auswählen

#!/bin/bash

wert=`du  /tmp/pictures| cut -f1`

echo Ordner ist $wert groß

if [ $wert -ge 10000 ]

	then
	echo einige Bilder werden entfernt

	else
	echo Ordner ist noch kleiner als 10MB
fi

Vielleicht kannst du darauf aufbauend mit deinen Skript weiter kommen

Gruß Thor

Cologne4711
Beiträge: 260
Registriert: 04.12.2006 11:37:59

Beitrag von Cologne4711 » 04.12.2007 09:32:25

nicht schön, sollte aber gehen ...

ls -t /tmp/pictures | tail -1000 | xargs rm


Zu dem vorherigen Post:

du solltest du mit der Option -s aufrufen
wert=`du -s /tmp/pictures | cut -f1`

MfG

Maverick83
Beiträge: 20
Registriert: 03.12.2007 15:31:57

Beitrag von Maverick83 » 04.12.2007 10:26:06

Danke für eure Beispiele ich hab es nun folgendermassen gelöst:

Code: Alles auswählen

#!/bin/sh
# This Script removes old pictures from the directory /tmp/pictures/

size=`stat -c %s /tmp/pictures/` 

if test $size -gt 1000000
then
	cd /tmp/pictures/
	ls -t ./ | tail -100 | xargs rm
else

fi
Sobald der Ordner pictures grösser als 1MB wird werden die letzten 100 Fotos gelöscht.

Danke und einen schönen Tag

Michi

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 04.12.2007 13:59:35

Weiß nicht, ob ich das ganze so mit stat machen würde.

Code: Alles auswählen

daniel@daniel-laptop:~$ stat -c %s bilder/
4096
daniel@daniel-laptop:~$ du -ms bilder/
187     bilder/
daniel@daniel-laptop:~$ du -hs bilder/
187M    bilder/
...unterschiedliche Resultate...
Oh, yeah!

Maverick83
Beiträge: 20
Registriert: 03.12.2007 15:31:57

Beitrag von Maverick83 » 05.12.2007 09:01:17

Ja danke Duff
Ich denke mit du -bs geht es besser, nur wird mir dazu auch das Verzeichniss ausgegeben.
Wie kann ich das abschneiden? also alles zwischen "/" und "/".

Benutzeravatar
I.C.Wiener
Beiträge: 674
Registriert: 19.08.2003 18:45:35

Beitrag von I.C.Wiener » 05.12.2007 10:28:48

Moin,

es gibt da ein kleines Logikproblem. ;)
Du musst die Abfrage und das Löschen in eine While-Schleife packen, damit es sinn ergibt.
Mit einem reinen If kann es vorkommen, dass auch nach dem Löschen der 1000 Bilder der Ordner noch größer als 10MB ist. Also While, damit er solange 1000 Bilder löscht, bis der Ordner kleiner als 10MB ist (wobei ich dann kleinere Zahlen wählen würde). ;)

MfG
Who is... LAIN?

Maverick83
Beiträge: 20
Registriert: 03.12.2007 15:31:57

Beitrag von Maverick83 » 05.12.2007 11:30:08

Ja das hat etwas, aber in diesem fall ist jedes Foto nur 4KB gross und Fotos werden nur gemacht falls jemand an der Tür klingelt.
Ich denke nicht, dass ich in einem Monat mehr als 250 mal Besuch bekomme.

Aber hast du nicht eine Idee wie ich den Pfad weg bekomme?

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Beitrag von cosmac » 05.12.2007 12:57:07

hi,

z.B. so (ausprobieren, ob du -d brauchst):

Code: Alles auswählen

size=`du -bs /tmp/pictures/ | cut -f 1`
size=`du -bs /tmp/pictures/ | cut -f 1 -d ' '`
Beware of programmers who carry screwdrivers.

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 05.12.2007 13:50:15

Genau, mit cut oder awk einfach "den Rest" abschneiden.

Code: Alles auswählen

daniel@daniel-laptop:~$ du -bs bilder/  | awk '{print $1}'
190581851
Und dann vielleicht doch noch das ganze in eine while-Schleife packen, so wie es I.C.Wiener schon gesagt hat.
Oh, yeah!

Antworten