Datei über FTP abschliessen

4088
jwa

Ich versuche, von meinem Windows-Desktop aus auf große Protokolldateien auf einem Remote-Server zuzugreifen. Ich habe nur FTP-Zugriff auf diesen Remote-Computer, keinen SSH-Zugriff.

Im Moment verwende ich WinSCP, um die gesamte Datei über FTP herunterzuziehen. Das heißt, ich muss jedes Mal die vollständige Datei übertragen. Da es sich jedoch um eine Protokolldatei handelt, brauche ich wahrscheinlich nur die letzten Zeilen.

Dies ist besonders frustrierend, da meine Bandbreite stark eingeschränkt ist. Daher dauert die Übertragung der gesamten Datei einige Minuten.

Wenn ich Shell-Zugriff hätte, könnte dies leicht erreicht werden, indem etwa tail -100die letzten 100 Zeilen verwendet werden.

Ich möchte eine Lösung finden, um dies über FTP durchzuführen. Beachten Sie, dass es sich nicht um ein durchgehendes Ende handeln muss, es genügt nur ein einmaliges Ende.

11

3 Antworten auf die Frage

8
Martin Prikryl

Was Sie tun möchten, kann auf jeden Fall mit FTP erfolgen. Technisch ist es das Gleiche wie jeder FTP-Client, wenn ein unterbrochener Dateidownload fortgesetzt wird.

Aus Anwendersicht weiß ich jedoch nicht, ob ein FTP-Client einen expliziten Download nur einer bestimmten Anzahl von nachfolgenden Bytes unterstützt.

Bei einigen FTP-Clients können Sie jedoch definitiv neue nachstehende Dateien herunterladen, die Sie zuvor heruntergeladen haben.

Starten Sie vor allem bei WinSCP einfach den Download einer Protokolldatei. Wählen Sie dann in der Bestätigungsaufforderung zum Überschreiben die Wiederaufnahme aus (das Dropdown-Menü der Schaltfläche " Nein" ). Beachten Sie, dass die Option offensichtlich nur dann verfügbar ist, wenn die Quelldatei größer als die Zieldatei ist.

Wenn Sie wirklich nur die letzten Zeilen des Protokolls herunterladen möchten, können Sie WinSCP überlisten, indem Sie eine lokale Dummy-Datei erstellen, deren Größe etwas kleiner ist als die Protokolldatei, bevor Sie den Download starten.

Sie können den obigen Trick auch einfach automatisieren:

fsutil file createnew mylog.log 100000000 winscp.com /command "open mysession" "get -resume /path_to_log/mylog.log" "exit" 

Alternativen zu fsutilfinden Sie unter Schnelles Erstellen großer Dateien auf einem Windows-System.

Mit mehr Aufwand können Sie das Skript so anpassen, dass zunächst die Protokolldateigröße überprüft und die Dummy-Dateigröße automatisch um einige Kilobyte kleiner als die Protokollgröße berechnet wird.

0
ChrisInEdmonton

Ich weiß nicht, wie Sie dies mit WinSCP tun können, und zwar ist dies möglicherweise nicht möglich, aber im Allgemeinen sollten Sie den Befehl REST verwenden können . Siehe RFC 3659 . Es ist mir jedoch nicht klar, ob Sie den Download erst spät in der Datei starten können oder ob Sie die Marker bereits erhalten haben müssen. RFC 3659 gibt an, dass dies möglich ist, zumindest im STREAM-Modus:

Übertragungen im STREAM-Modus mit FILE STRUcture werden möglicherweise neu gestartet, obwohl nicht zusätzlich zu den Daten selbst ein Neustart-Marker übertragen wurde. Dazu verwenden Sie bei Bedarf den Befehl SIZE in Kombination mit dem Befehl RESTART (REST) ​​und einem der Standardbefehle für die Dateiübertragung.

0
Znik

Ich habe keine Software gehört, die Ihre Anforderungen erfüllt. Aber wenn Sie Programmierer sind, sollten Sie verstehen, wie man dies in Perl schreibt.

Hier habe ich ein Beispiel gefunden, wie man alle Dateien bekommt. Dies ist nicht Ihre Entschlossenheit, aber es hilft Ihnen zu verstehen, wie es geht: http://www.perlmonks.org/?node_id=907019

eine weitere Hilfe für die Bibliothek Net :: FTP: http://search.cpan.org/dist/libnet/Net/FTP.pm

Hiermit können Sie eine FTP-Verbindung zum Server herstellen (erstes Beispiel), die Autorisierung vornehmen (erstes Beispiel).

Die zweite URL hilft Ihnen dabei, den letzten Teil der Datei mithilfe der folgenden Methoden zu erhalten: -> ascii Übertragungsmodus auf ASCII setzen, da dies Protokolldatei ist Kurs, von dem aus in der Datei das Lesen beginnen soll -> read (BUFFER, SIZE [, TIMEOUT]) liest den kleinen SIZE-Part direkt in die BUFFER-Variable

Weitere Funktionen: Länge (BUFFER) gibt an, wie viele Daten Sie erhalten. Wenn es NULL ist, haben Sie wahrscheinlich den einfachen Puffer des EOF-Drucks ("$ BUFFER \ n") auf dem Bildschirm erreicht

Beachten Sie, dass dies keine vollständige Lösung ist, sondern eine Möglichkeit, dies zu tun. Nur eines der Gründe, warum ich das alles schreibe, ist, dass wahrscheinlich keine Software für Ihre Aufgabe bereit ist.

Wenn Sie nicht wissen, wie Sie dieses Programm schreiben, fragen Sie einfach auf stackoverflow.com, nicht auf Superuser. Es gibt viele Programmierer, die für Hilfe bereit sind.

Wenn dies möglich ist, überprüfen Sie, ob Ihre FTP-Site den Download fortsetzt. Ohne dieses Lesen ist der Endteil der Datei nicht möglich.

Eine andere partielle Auflösung kann eine Protokolldateirotation sein, eine Datei pro Tag oder eine Stunde. Dies hängt davon ab, wie schnell die Protokolldatei wächst.