Verfolgen einer Datei über FTP

Verfolgen einer Datei über FTP

Ich versuche, von meinem Windows-Desktop aus auf große Protokolldateien auf einem Remote-Server zuzugreifen. IchnurSie müssen FTP-Zugriff auf diesen Remotecomputer haben, jedoch keinen SSH-Zugriff.

Im Moment verwende ich WinSCP, um die gesamte Datei über FTP herunterzuladen. Das bedeutet, dass ich jedes Mal die gesamte Datei übertragen muss. Da es sich jedoch um eine Protokolldatei handelt, benötige ich wahrscheinlich nur die letzten Zeilen.

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

Wenn ich Shell-Zugriff hätte, könnte ich dies problemlos erreichen, indem ich etwas wie „+“ verwende, tail -100um die letzten 100 Zeilen abzurufen.

Ich würde gerne eine Lösung finden, um dies über FTP durchzuführen. Beachten Sie, dass es sich nicht um ein durchgehendes Ende handeln muss, ein einmaliges Ende reicht aus.

Antwort1

Was Sie tun möchten, lässt sich definitiv mit FTP erledigen. Technisch gesehen ist es dasselbe, was jeder FTP-Client tut, wenn er einen unterbrochenen Dateidownload fortsetzt.

Aus Benutzersicht weiß ich jedoch nicht, ob irgendein FTP-Client einen expliziten Download nur einer bestimmten Anzahl nachfolgender Bytes unterstützt.

Einige FTP-Clients ermöglichen Ihnen jedoch auf jeden Fall das Herunterladen neuer Inhalte von Dateien, die Sie zuvor heruntergeladen haben.

Insbesondere bei WinSCP starten Sie einfach einen Logfile-Download. Dann auf derBestätigungsaufforderung zum Überschreiben, wähle ausWieder aufnehmen(es befindet sich im Dropdown-Menü desNEINSchaltfläche). Beachten Sie, dass die Option offensichtlich nur 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 austricksen, indem Sie vor dem Starten des Downloads eine Dummy-lokale Datei erstellen, die etwas kleiner als die Protokolldatei ist.

Sie können den obigen Trick auch ganz 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 unterSchnell eine große Datei auf einem Windows-System erstellen?

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

Antwort2

Ich weiß nicht, wie Sie dies mit WinSCP tun können, und tatsächlich ist es möglicherweise nicht möglich, aber im Allgemeinen sollten Sie in der Lage sein, dieAUSRUHENBefehl. SieheRFC 3659. Mir ist allerdings nicht klar, ob man den Download erst am Ende der Datei starten kann oder ob man die Markierungen bereits erhalten haben muss. RFC 3659 gibt jedoch an, dass dies zumindest im STREAM-Modus möglich ist:

Übertragungen im STREAM-Modus mit FILE STRUcture können neu gestartet werden, auch wenn zusätzlich zu den Daten selbst kein Neustartmarker übertragen wurde. Dies geschieht durch die Verwendung des SIZE-Befehls, falls erforderlich, in Kombination mit dem RESTART-Befehl (REST) ​​und einem der Standardbefehle für Dateiübertragungen.

Antwort3

Ich habe von keiner Software gehört, die Ihre Anforderungen unterstützt. Aber wenn Sie Programmierer sind, sollten Sie wissen, wie man dies in Perl schreibt.

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

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

damit können Sie eine FTP-Verbindung zum Server herstellen (erstes Beispiel) und eine Autorisierung vornehmen (erstes Beispiel)

Die zweite URL hilft Ihnen, den letzten Teil der Datei mit den folgenden Methoden abzurufen: ->ascii stellt den Übertragungsmodus auf ASCII ein, da dies eine Protokolldatei ist ->size (DATEI) ermittelt die Größe der Datei, um zu zählen, wo Sie beginnen sollen ->restart (WO) stellt den Dateikursor ab, ab wo in der Datei Sie mit dem Lesen beginnen möchten ->read (BUFFER, SIZE [, TIMEOUT]) liest den kleinen SIZE-Teil direkt in die BUFFER-Variable ein

eine weitere Funktion: length(BUFFER) gibt an, wie viele Daten Sie erhalten. Wenn der Wert NULL ist, haben Sie wahrscheinlich EOF erreicht print ("$BUFFER\n") einfacher Druck des Pufferinhalts auf den Bildschirm

Beachten Sie, dass dies keine vollständige Lösung ist, sondern eine Vorgehensweise. Der einzige Grund, warum ich das alles schreibe, ist, dass es wahrscheinlich keine Software gibt, die für Ihre Aufgabe bereit ist.

Wenn Sie nicht wissen, wie man dieses Programm schreibt, fragen Sie einfach auf stackoverflow.com, nicht als Superuser. Dort gibt es viele Programmierer, die gerne helfen.

Wenn möglich, überprüfen Sie, ob Ihre FTP-Site die Fortsetzung des Downloads unterstützt. Ohne diese Funktion ist das Lesen des letzten Teils der Datei nicht möglich.

Eine weitere Teillösung kann die Rotation der Protokolldateien sein, eine Datei pro Tag oder pro Stunde. Dies hängt davon ab, wie schnell die Protokolldatei wächst.

verwandte Informationen