Хвост файла по FTP

11

Я пытаюсь получить доступ к большим файлам журналов на удаленном сервере с моего рабочего стола Windows. У меня есть только FTP-доступ к этой удаленной машине, но не SSH-доступ.

В настоящее время я использую WinSCP, чтобы вытянуть весь файл через FTP. Это означает, что я должен передавать полный файл каждый раз. Однако, учитывая, что это лог-файл, мне, вероятно, понадобятся только последние несколько строк.

Это особенно расстраивает, так как моя пропускная способность сильно ограничена, поэтому передача всего файла занимает несколько минут.

Если бы у меня был доступ к оболочке, этого можно было бы легко достичь, используя что-то вроде tail -100получения последних 100 строк.

Я хотел бы найти решение для выполнения этого через FTP. Обратите внимание, что это не обязательно должен быть сплошной хвост, достаточно одного раза.

JWA
источник

Ответы:

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) ​​и одной из стандартных команд передачи файлов.

ChrisInEdmonton
источник
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) - получите размер файла для подсчета, где вы должны начать -> restart (WHERE) установить файл курсора, откуда в файле, который вы хотите начать читать -> читать (BUFFER, SIZE [, TIMEOUT]), непосредственно читать небольшую часть SIZE в переменную BUFFER

другие функции: длина (BUFFER) скажет вам, сколько данных вы получаете. Если это НОЛЬ, значит, вы достигли EOF print ("$ BUFFER \ n") содержимого буфера простой печати на экране

Обратите внимание, это не полностью решение, а способ, как это сделать. Единственная причина, почему я пишу все это, - вероятно, нет программного обеспечения, готового для вашей задачи.

Если вы не знаете, как написать эту программу, просто спросите на stackoverflow.com, а не superuser. Есть много программистов, которые готовы помочь.

Если это возможно, проверьте, поддерживает ли ваш ftp сайт возобновление загрузки. Без этого чтения конец файла невозможен.

Другим частичным разрешением может быть ротация файла журнала, один файл в день или час. это зависит от того, насколько быстро растет файл журнала.

Znik
источник