Обробка файлу через FTP


11

Я намагаюся отримати доступ до великих файлів журналів на віддаленому сервері зі свого робочого столу Windows. У мене є лише доступ FTP до цієї віддаленої машини, а не доступ до SSH.

На даний момент я використовую WinSCP, щоб витягнути весь файл вниз через FTP. Це означає, що я маю щоразу переносити повний файл. Однак, враховуючи файл журналу, мені, мабуть, знадобляться лише останні кілька рядків.

Це особливо засмучує, оскільки моя пропускна здатність сильно обмежена, тому передача всього файлу займає кілька хвилин.

Якби у мене був доступ до оболонки, цього можна легко досягти, використовуючи щось на кшталт tail -100отримання останніх 100 рядків.

Я хотів би знайти рішення для виконання цього за допомогою FTP. Зауважте, що це не повинно бути безперервним хвостом, достатньо було б одноразового.

Відповіді:


8

Те, що ви хочете зробити, напевно можна зробити за допомогою FTP. Технічно це те саме, що робить будь-який FTP-клієнт, коли відновлює завантаження перерваного файлу.

Хоча з точки зору користувача, я не знаю, чи будь-який FTP-клієнт підтримує явне завантаження лише заданої кількості кінцевих байтів.

Але деякі клієнти FTP, безумовно, дозволять вам завантажити новий контент, який ви завантажили раніше.

Зокрема, з WinSCP, просто ініціюйте завантаження файлу журналу. Потім у запиті підтвердження перезапис виберіть « Відновити» (воно знаходиться у спадному меню кнопки « Ні »). Зауважте, що параметр, очевидно, доступний, лише якщо вихідний файл більший за файл призначення.

Якщо ви дійсно хочете завантажити лише останні кілька рядків журналу, ви можете обдурити WinSCP, створивши фіктивний локальний файл розміром, меншим за розмір, ніж файл журналу, перш ніж розпочати завантаження.

Ви також можете легко автоматизувати описаний вище трюк:

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

За альтернативами fsutil, див. Швидке створення великого файлу в системі Windows?

Доклавши більше зусиль, ви можете змінити сценарій, щоб спочатку перевірити розмір файлу журналу та автоматично обчислити фіктивний розмір файлу на кілька кілобайт, менший за розмір журналу.


0

Я не знаю, як це можна зробити за допомогою WinSCP, і справді це може бути не можливо, але в цілому ви повинні мати можливість використовувати команду REST . Див. RFC 3659 . Мені незрозуміло, чи можна починати завантаження з пізнього файлу, чи потрібно, що ви вже отримали маркери. RFC 3659 вказує, що це можливо, принаймні в режимі STREAM, хоча:

Передача режиму STREAM за допомогою FILE STRUcture може бути перезапущена, навіть якщо маркер перезапуску не передано крім самих даних. Це робиться за допомогою команди SIZE, якщо потрібно, в поєднанні з командою RESTART (REST) ​​та однією зі стандартних команд передачі файлів.


0

Я не чув про жодне програмне забезпечення, яке підтримує ваші потреби. Але якщо ви програміст, вам слід зрозуміти, як це написати в Perl.

Тут я знайшов приклад, як отримати весь файл. Це не є вашим рішенням, але це допоможе вам зрозуміти, як це зробити: http://www.perlmonks.org/?node_id=907019

інша, допомога для бібліотеки Net :: FTP: http://search.cpan.org/dist/libnet/Net/FTP.pm

використовуючи це, ви можете відкрити ftp-з'єднання з сервером (перший приклад), зробити авторизацію (перший приклад)

друга URL допоможе вам отримати останню частину файлу за допомогою методів: -> ascii встановити режим передачі на ascii, тому що це logfile -> size (FILE), отримайте розмір файлу для підрахунку, з якого слід почати -> перезапустити (WHERE) встановити файл coursor, звідки у файлі, який ви хочете почати читати -> читати (BUFFER, SIZE [, TIMEOUT]) безпосередньо читати невелику частину SIZE у змінну BUFFER

інші функції: довжина (BUFFER) повідомляє вам, скільки даних ви отримуєте. Якщо це ZERO, ви, мабуть, досягли простого вмісту буфера для друку на екран EOF ("$ BUFFER \ n").

Зауважте, це не зовсім резолюція, а спосіб, як це зробити. Лише одна причина, чому я це все пишу, - це, мабуть, немає програмного забезпечення, готового до вашої задачі.

Якщо ви не знаєте, як написати цю програму, просто запитайте на stackoverflow.com, а не суперпользователь. Є багато програмістів, які готові допомогти.

Якщо це можливо, перевірте, чи підтримує ваш ftp сайт відновлення завантаження. Незважаючи на це, читати кінцеву частину файлу неможливо.

Ще однією частковою роздільною здатністю може бути обертання файлу журналу, один файл на день або годину. це залежить від того, як швидко зростає файл журналу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.