Tailing einer Datei über FTP

11

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

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

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

Wenn ich Shell-Zugriff hätte, könnte dies leicht erreicht werden, indem man so etwas wie tail -100die letzten 100 Zeilen erhält.

Ich möchte eine Lösung finden, um dies über FTP durchzuführen. Beachten Sie, dass es sich nicht um einen durchgehenden Schwanz handeln muss, sondern nur um einen einmaligen Schwanz.

jwa
quelle

Antworten:

8

Was Sie tun möchten, kann definitiv mit FTP erledigt werden. Technisch ist es dasselbe, was jeder FTP-Client tut, wenn er einen unterbrochenen Dateidownload fortsetzt.

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

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

Starten Sie insbesondere mit WinSCP einfach einen Download der Protokolldatei. Dann wird auf der überschreiben Bestätigungsaufforderung , wählen Sie den Lebenslauf (es ist im Dropdown - Menü der Nein - Taste). 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 betrügen, indem Sie eine lokale Dummy-Datei mit einer Größe erstellen, die etwas kleiner als die Protokolldatei ist, 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 Schnelle Erstellung großer Dateien auf einem Windows-System?

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

Martin Prikryl
quelle
0

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 . Mir ist jedoch nicht klar, ob Sie spät in der Datei mit dem Herunterladen beginnen können oder ob Sie die Marker bereits erhalten haben müssen. RFC 3659 zeigt jedoch an, dass dies zumindest im STREAM-Modus möglich ist:

Übertragungen im STREAM-Modus mit FILE STRUcture können neu gestartet werden, obwohl zusätzlich zu den Daten selbst keine Neustartmarkierung übertragen wurde. Dies erfolgt bei Bedarf mit dem Befehl SIZE in Kombination mit dem Befehl RESTART (REST) ​​und einem der Standardbefehle für die Dateiübertragung.

ChrisInEdmonton
quelle
0

Ich habe von keiner Software gehört, die Ihre Anforderungen unterstützt. 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 andere Hilfe für die Bibliothek Net :: FTP: http://search.cpan.org/dist/libnet/Net/FTP.pm

Mit dieser Option können Sie eine FTP-Verbindung zum Server öffnen (erstes Beispiel). Autorisierung vornehmen (erstes Beispiel)

Die zweite URL hilft Ihnen dabei, den letzten Teil der Datei mithilfe der folgenden Methoden abzurufen: -> ASCII-Übertragungsmodus auf ASCII setzen, da dies die Protokolldatei ist. -> Größe (DATEI) Abrufen der Dateigröße zum Zählen, wo Sie beginnen sollen coursor, von wo aus Sie in der gewünschten Datei mit dem Lesen beginnen möchten -> lesen (BUFFER, SIZE [, TIMEOUT]) lesen Sie den kleinen SIZE-Teil direkt in die BUFFER-Variable

Eine weitere Funktion: Länge (BUFFER) gibt an, wie viele Daten Sie erhalten. Wenn es NULL ist, haben Sie wahrscheinlich den einfachen Druckpufferinhalt von EOF print ("$ BUFFER \ n") auf dem Bildschirm erreicht

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

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

Wenn es möglich ist, überprüfen Sie, ob Ihre FTP-Site die Wiederaufnahme des Downloads unterstützt. Ohne dieses Lesen ist ein Teil der Datei unmöglich.

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

Znik
quelle