Dostosowywanie pliku przez FTP

11

Próbuję uzyskać dostęp do dużych plików dziennika na zdalnym serwerze z pulpitu Windows. Mam tylko dostęp FTP do tego zdalnego komputera, a nie SSH.

W tej chwili używam WinSCP do ściągnięcia całego pliku przez FTP. Oznacza to, że muszę przesyłać cały plik za każdym razem. Jednak biorąc pod uwagę, że jest to plik dziennika, prawdopodobnie potrzebuję tylko ostatnich kilku wierszy.

Jest to szczególnie frustrujące, ponieważ moja przepustowość jest poważnie ograniczona, więc przesłanie całego pliku zajmuje kilka minut.

Gdybym miał dostęp do powłoki, można to łatwo osiągnąć, używając czegoś takiego jak tail -100uzyskanie ostatnich 100 linii.

Chciałbym znaleźć rozwiązanie, aby wykonać to przez FTP. Zwróć uwagę, że nie musi to być ciągły ogon, wystarczy jednorazowy.

jwa
źródło

Odpowiedzi:

8

To, co chcesz zrobić, na pewno można zrobić za pomocą FTP. Technicznie jest to to samo, co robi każdy klient FTP, gdy wznawia przerwane pobieranie pliku.

Chociaż z perspektywy użytkownika nie wiem, czy jakikolwiek klient FTP obsługuje jawne pobieranie tylko określonej liczby bajtów końcowych.

Ale niektórzy klienci FTP na pewno pozwolą ci pobrać nową końcową zawartość wcześniej pobranego pliku.

Szczególnie w WinSCP, po prostu zainicjuj pobieranie pliku dziennika. Następnie w monicie o potwierdzenie zastąpienia wybierz Wznów (znajduje się w rozwijanym menu przycisku Nie ). Zauważ, że opcja jest oczywiście dostępna, tylko jeśli plik źródłowy jest większy niż plik docelowy.

Jeśli naprawdę chcesz pobrać tylko kilka ostatnich wierszy dziennika, możesz oszukać WinSCP, tworząc atrapę pliku lokalnego o rozmiarze nieco mniejszym niż plik dziennika przed rozpoczęciem pobierania.

Możesz także łatwo zautomatyzować powyższą sztuczkę:

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

Aby uzyskać alternatywy dla fsutil, zobacz Szybkie tworzenie dużych plików w systemie Windows?

Z większym wysiłkiem możesz zmodyfikować skrypt, aby najpierw sprawdzić rozmiar pliku dziennika i automatycznie obliczyć rozmiar pliku zastępczego kilka kilobajtów mniejszych niż rozmiar dziennika.

Martin Prikryl
źródło
0

Nie wiem, jak możesz to zrobić za pomocą WinSCP i rzeczywiście może nie być to możliwe, ale ogólnie powinieneś być w stanie użyć polecenia REST . Zobacz RFC 3659 . Nie jest dla mnie jasne, czy możesz rozpocząć pobieranie od końca pliku, czy też musisz już otrzymać znaczniki. RFC 3659 wskazuje, że jest to możliwe, przynajmniej w trybie STREAM:

Przesyłanie w trybie STREAM za pomocą PLIKU STRUKTURY może zostać zrestartowane, nawet jeśli oprócz samych danych nie przesłano znacznika restartu. Odbywa się to za pomocą polecenia SIZE, jeśli to konieczne, w połączeniu z poleceniem RESTART (REST) ​​i jedną ze standardowych poleceń przesyłania plików.

ChrisInEdmonton
źródło
0

Nie słyszałem o żadnym oprogramowaniu, które obsługuje Twoje potrzeby. Ale jeśli jesteś programistą, powinieneś zrozumieć, jak napisać to w Perlu.

Tutaj znalazłem przykład, jak uzyskać cały plik. To nie jest twoje rozwiązanie, ale pomaga zrozumieć, jak to zrobić: http://www.perlmonks.org/?node_id=907019

inna, pomoc dla biblioteki Net :: FTP: http://search.cpan.org/dist/libnet/Net/FTP.pm

za pomocą tego można otworzyć połączenie ftp z serwerem (pierwszy przykład) dokonać autoryzacji (pierwszy przykład)

drugi adres URL pomaga uzyskać ostatnią część pliku przy użyciu metod: -> ascii ustaw tryb przesyłania na ascii, ponieważ jest to plik dziennika -> rozmiar (PLIK) pobierz rozmiar pliku do zliczania od momentu rozpoczęcia -> uruchom ponownie (GDZIE) ustaw plik kursor, z którego z pliku chcesz zacząć czytać -> czytaj (BUFFER, SIZE [, TIMEOUT]) bezpośrednio wczytaj małą część SIZE do zmiennej BUFFER

inne funkcje: długość (BUFOR) informują o tym, ile danych otrzymujesz. Jeśli jest to ZERO, prawdopodobnie osiągnąłeś zawartość EOF print („$ BUFFER \ n”) prostej zawartości bufora wydruku na ekranie

Zauważ, że nie jest to całkowicie rozwiązanie, ale sposób, jak to zrobić. Jest tylko jeden powód, dla którego piszę to wszystko, prawdopodobnie nie ma oprogramowania gotowego do wykonania zadania.

Jeśli nie wiesz, jak napisać ten program, po prostu zapytaj na stackoverflow.com, a nie superużytkowniku. Jest wielu programistów gotowych do pomocy.

Jeśli to możliwe, sprawdź, czy witryna ftp obsługuje wznawianie pobierania. Bez tego końca odczytu część pliku jest niemożliwa.

Inną częściową rozdzielczością może być rotacja pliku dziennika, jeden plik dziennie lub godzinę. zależy to od tego, jak szybko rośnie plik dziennika.

Znik
źródło