Alte Daten auf FTP-Server löschen

Hiho,

ich lade von meiner Foscam auf ein FTP Laufwerk im Zeitinterval X immer ein Bild hoch. Nun sammeln sich ja dort Daten an.
Gibts mit IPS eine Möglichkeit auf das FTP Laufwerk zuzugreifen und dann die jeweils ältesten Tagesdaten einmal täglich wegzuwerfen, so dass immer genug Speicher frei ist?

Gruß

Kai

Gibt es.

PHP: FTP - Manual

Alternativ kannst Du dir ein kurzes Windows Batchskript schreiben was das macht.

In etwa so


ftp user:pass@server
bin
cd "Verzeichnis"
del .
quit

löscht alle Dateien im Ordner „Verzeichnis“…

Uuups… ich glaube, das wollte er nicht;)

Naja, ein wenig kreativ muss man schon sein :slight_smile:

War ja auch nur als Beispiel gedacht - klar kann man da beliebig filtern (mit ein wenig RegEx oder Ordnerstruktur)…

Kreativität allein nutzt da nicht viel… das geht schon in die Materie!
RWN’s Link ist der Anfang, aber weit weg von der Lösung der Aufgabe:

…Da gibts noch soviel dazwischen (PHP-Befehle) an die ich mich zwecks Komplexität auch noch nicht heran gewagt habe, zumal die Aussage „ältesten Tagesdaten löschen“ ja mehr oberflächlich ist…

In meinem Wetterscript, wird der FTP hoch und runter gebetet. Ich glaube mich auch erinnern zu können, schon mal ein ähnliches Script gepostet zu haben. Bin nur zu faul zum suchen. :smiley:

Ach… die Mod’s werr’n träge:D Spass;)

Hi zusammen,
coole Diskussion hier geworden :slight_smile:
Als kleines Beispiel. Meine IP Camera wirft alle 5 Sekunden ein Bild auf den USB-Stick an der Fritze (ohne IPS). Der ist aber natürlich irgendwann voll.
Hab mal so gerechnet, und denke in ca. 10 Tagen!
Nun würde ich gerne alle Bilder die älter 7 Tage sind einfach vom USB Stick werfen lassen, dies allerdings mit IPS!
Kann man das Erstelldatum von Dateien auslesen, oder noch besser nen Unix Timestamp?

Gruß

Kai

Ja kann man, je nachdem wo man das Skript ausführen will, gibt es mehrere Möglichkeiten. Wenn Du es direkt auf der FritzBox laufen lassen willst (weil z.B. ein Freetz drauf läuft), dann bietet das Linux darunter eine Menge Möglichkeiten - das Skript sollte eigentlich aus IPS aufrufbar sein (oder irre ich mich ?)

Wenn Du es von der Windows Büchse machen willst, dann empfehle ich Powershell - da ist das ein Einzeiler (+ ein wenig Variablen^^).

Beispiel:


$DataFolder = “c:	emp\*.log”
$Days_toDelete = (get-Date).adddays(-7)

Get-Childitem $DataFolder -recurse | ?{!$_.PSIsContainer -and ($_.LastWriteTime -lt $Days_toDelete)} | remove-item -whatif -force


Mit diesem Script werden alle LogFiles gelöscht älter 7 Tage

Gruß
Ich

Ja genau so meine ich es, nur für IPS und nicht für ne Drittsoftware :slight_smile:

Wobei, die USB 1.1 Schnittstelle an der Fritzbox wird bestimmt noch zum Problem beim Löschen, da ist der ja Jahre unterwegs *g

für Linux wäre es z.B.

find /pfad -mtime +30

sucht Dir alle Dateien aus /pfad, die älter als 30 Tage sind.

Das Kommando kannst Du auch erweitern, wenn Du Dir sicher bist, dass Du alle diese Dateien löschen willst:

find /pfad -mtime +30 -exec rm {} \;

Ich mache manchmal einen kleinen Test zuvor mit:

find /pfad -mtime +30 -exec ls -l {} \;

Wenn Du auf die FritzBox per SSH Zugriff hat, kannst Du das entsprechende Script dort ablegen und dann über den Webserver der FritzBox per PHP aufrufen.

ich glaub ich hab die Lösung für IPS,
denn man kann auf der Kamera den Ordner mittels CGI Befehl wechseln!
Also muss man doch nur mit IPS vorher den Ordner nach vorgefertigtem Muster anlegen und 2 Wochen später wieder löschen!
Aber bevor’s ans lösen geht, ich habs schon gesucht, aber… wie führe ich bei IPS Befehl im MS-Dos Modus aus? also sprich „cd directory“ oder sowas!

Gruß

Kai

über system(), passthru(), oder exec().

Aber ich bin mir nicht sicher, ob das damit glücklich wirst. Wenn Du das ganze über eine BATCH Datei machen kannst, dann ja.

Ansonsten scheitert es eventuell an der fehlenden Interaktivität, einem laufenden Prozess Eingaben mitteilen zu können …

Wie willst Du es machen?

Gruß,

ernie

vom Prinzip ein PHP Skript:

a) erstelle Ordner 4711
b) wechsle Ordner auf Kamera auf 4711 (mittels CGI Befehl)

in ner Stunde das Gleiche Script nochmal mit 4712! So hatte ich es mir mal gedacht!

Hier zum selbst erweitern. :slight_smile:

<?

$conn_id = ftp_connect("192.168.1.10");

// Login mit Benutzername und Passwort
$login_result = ftp_login($conn_id, "ftpuser", "123456");

// Nach Verzeichnis .... wechseln
ftp_chdir($conn_id, "Bilder");

$ftp_nlist = ftp_nlist($conn_id, ".");

$alter = 3600;

foreach($ftp_nlist as $date)
{
   if(ftp_mdtm($conn_id, $date) < (time()-$alter))
   {
       echo $date." letzte Aktualisierung: " . date("d.m.Y H:i:s", ftp_mdtm($conn_id, $date))."
";
       ftp_delete($conn_id, $date);
    }
}
ftp_close($conn_id);
?>