Seguindo um arquivo por FTP

11

Estou tentando acessar arquivos de log grandes em um servidor remoto na área de trabalho do Windows. Eu tenho acesso FTP a esta máquina remota, não acesso SSH.

No momento, estou usando o WinSCP para baixar o arquivo inteiro por FTP. Isso significa que eu tenho que transferir o arquivo completo toda vez. No entanto, dado que é um arquivo de log, é provável que eu precise apenas das últimas linhas.

Isso é particularmente frustrante, pois minha largura de banda é severamente limitada, portanto, a transferência do arquivo inteiro leva alguns minutos.

Se eu tivesse acesso ao shell, isso poderia ser facilmente alcançado usando algo como tail -100para obter as últimas 100 linhas.

Gostaria de encontrar uma solução para fazer isso via FTP. Observe que não precisa ser uma cauda contínua, apenas uma única vez seria suficiente.

jwa
fonte

Respostas:

8

O que você quer fazer, definitivamente pode ser feito com FTP. Tecnicamente, é o mesmo que qualquer cliente de FTP faz ao retomar o download de um arquivo interrompido.

Embora, do ponto de vista do usuário, eu não sei, se algum cliente FTP suporta um download explícito de apenas um determinado número de bytes à direita.

Mas alguns clientes de FTP definitivamente permitirão que você baixe o novo conteúdo final do arquivo que você baixou anteriormente.

Particularmente com o WinSCP, basta iniciar o download do arquivo de log. Em seguida, no prompt de confirmação Substituir , selecione Retomar (no menu suspenso do botão Não ). Observe que a opção está obviamente disponível, apenas se o arquivo de origem for maior que o arquivo de destino.

Se você realmente deseja baixar apenas as últimas linhas do log, pode enganar o WinSCP, criando um arquivo local fictício com um tamanho um pouco menor que o arquivo de log antes de iniciar o download.

Você também pode automatizar facilmente o truque acima:

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

Para alternativas ao fsutil, consulte Criar rapidamente arquivos grandes em um sistema Windows?

Com mais esforço, você pode modificar o script para verificar primeiro o tamanho do arquivo de log e calcular automaticamente o tamanho do arquivo fictício alguns kilobytes menores que o tamanho do log.

Martin Prikryl
fonte
0

Não sei como você pode fazer isso usando o WinSCP e, de fato, pode não ser possível, mas, em geral, você deve poder usar o comando REST . Veja RFC 3659 . Não está claro para mim se você pode começar a baixar mais tarde no arquivo ou se já precisa ter recebido os marcadores. A RFC 3659 indica que isso é possível, pelo menos no modo STREAM, embora:

As transferências do modo STREAM com FILE STRUcture podem ser reiniciadas mesmo que nenhum marcador de reinicialização tenha sido transferido além dos próprios dados. Isso é feito usando o comando SIZE, se necessário, em combinação com o comando RESTART (REST) ​​e um dos comandos padrão de transferência de arquivos.

ChrisInEdmonton
fonte
0

Não ouvi nenhum software que atenda às suas necessidades. Mas se você é programador, deve entender como escrever isso em Perl.

Aqui eu encontrei o exemplo de como obter todos os arquivos. Esta não é uma decisão sua, mas ajuda a entender como fazer: http://www.perlmonks.org/?node_id=907019

outra, ajuda para a biblioteca Net :: FTP: http://search.cpan.org/dist/libnet/Net/FTP.pm

usando isso, você pode abrir a conexão ftp com o servidor (primeiro exemplo) fazer autorização (primeiro exemplo)

o segundo URL ajuda você a obter a última parte do arquivo usando os métodos: -> ascii define o modo de transferência para ascii porque esse é o arquivo de log -> size (FILE) obtém o tamanho do arquivo para contar onde você deve iniciar -> restart (WHERE) define o arquivo cursor de onde, no arquivo que você deseja iniciar, leia -> leia (BUFFER, SIZE [, TIMEOUT]) leia diretamente a pequena parte SIZE na variável BUFFER

Outras funções: length (BUFFER) informa a quantidade de dados que você obtém. Se for ZERO, você alcançou o conteúdo simples do buffer de impressão EOF ("$ BUFFER \ n") na tela

Observe que isso não é completamente uma solução, mas uma maneira de fazer. Apenas uma razão pela qual eu escrevo tudo isso é que provavelmente não há software pronto para sua tarefa.

Se você não sabe como escrever esse programa, basta perguntar no stackoverflow.com, não no superusuário. Existem muitos programadores prontos para ajuda.

Se possível, verifique se o site ftp suporta a retomada do download. Sem essa leitura final, parte do arquivo é impossível.

Outra resolução parcial pode ser a rotação do arquivo de log, um arquivo por dia ou uma hora. isso depende da rapidez com que o arquivo de log cresce.

Znik
fonte