Wie lösche ich Dateien mit einem Python-Skript von einem FTP-Server, die älter als 7 Tage sind?

8

Ich möchte ein Python-Skript schreiben, mit dem ich Dateien von einem FTP-Server löschen kann, nachdem sie ein bestimmtes Alter erreicht haben. Ich habe das Skript unten vorbereitet, aber es gibt die Fehlermeldung: WindowsError: [Error 3] The system cannot find the path specified: '/test123/*.*'

Hat jemand eine Idee, wie Sie dieses Problem lösen können? Vielen Dank im Voraus!

%Vor%     
Tom 19.05.2010, 15:57
quelle

5 Antworten

9

OK. Angenommen, Ihr FTP-Server unterstützt den Befehl MLSD , erstellen Sie ein Modul mit dem folgenden Code (dies ist Code aus einem Skript, das ich zum Synchronisieren einer Remote-FTP-Site mit einem lokalen Verzeichnis verwende):

Modulcode

%Vor%

Einzelverzeich- nisfall

Wenn Sie an den Dateien eines Verzeichnisses arbeiten möchten, können Sie:

%Vor%

Dies sollte tun, was Sie wollen.

ein Verzeichnis und seine Nachkommen

Wenn das nun rekursiv funktioniert, müssen Sie die folgenden zwei Änderungen im Code für "single directory case" vornehmen:

%Vor%

und

%Vor%

Möglicher Vorbehalt

Die Server, mit denen ich gearbeitet habe, hatten keine Probleme mit relativen Pfaden in den Befehlen STOR und DELE , also hat site.delete mit einem relativen Pfad auch funktioniert. Wenn Ihr FTP-Server pfadlose Dateinamen erfordert, sollten Sie zuerst .cwd an die path , .delete die Ebene ftpfile.name und dann .cwd an den Basisordner zurückgeben.

    
tzot 24.06.2010 22:51
quelle
3

Ich musste das machen und es dauerte eine Weile, dachte ich könnte hier Zeit sparen. Wir verwenden Python mit installiertem ftputil-Modul:

%Vor%     
user2070320 15.07.2013 20:07
quelle
2

OK, lieber als den Code, den Sie weiter gepostet haben, zu analysieren, hier ist ein Beispiel, das Sie auf den richtigen Weg bringen könnte.

%Vor%

Führen Sie es aus und Sie erhalten so etwas ausgegeben, was ein Anfang sein sollte für das, was Sie erreichen möchten. Um es zu beenden, müssten Sie das erste Ergebnis in eine Datetime parsen, mit "now" vergleichen und ftp.delete () verwenden, um die Remote-Datei loszuwerden, wenn sie zu alt ist.

%Vor%     
eemz 19.05.2010 17:52
quelle
0

Nun, es sieht so aus, als ob der Fehler, den Sie sehen, damit zu tun hat, dass Sie versuchen, das Verzeichnis "test123" von Ihrem lokalen Rechner zu entfernen, nicht die FTP-Site. Die FTP-Dokumente haben eine Methode namens löschen , und das ist es, was Sie verwenden möchten um die Datei zu entfernen. Was das Testen betrifft, ob etwas 7 Tage alt ist oder nicht, müssen Sie diese Dateien tatsächlich vorübergehend vom FTP herunterladen und dann die Änderungszeiten überprüfen, bevor Sie FTP.delete verwenden.

    
Ben Hayden 19.05.2010 16:18
quelle
0

Auf welchem ​​Betriebssystem laufen Sie? Der Dateipfad /test123/*.* ist Unix-artig, aber die Nachricht sagt WindowsError . Nehmen Sie die Ausgabe eines FTP-LIST-Befehls, der im Unix-Stil ist, und versuchen, ihn in einem Windows-Skript wörtlich zu verwenden?

    
eemz 19.05.2010 17:16
quelle

Tags und Links