Salientando um arquivo sobre FTP

11

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

No momento, estou usando o WinSCP para baixar todo o arquivo pelo FTP. Isso significa que eu tenho que transferir o arquivo inteiro toda vez. No entanto, dado que é um arquivo de log, provavelmente só precisarei das últimas linhas.

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

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

Eu gostaria de encontrar uma solução para realizar isso via FTP. Note que não tem que ser uma cauda contínua, apenas um one-off seria suficiente.

    
por jwa 17.01.2014 / 15:12

3 respostas

8

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

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

Mas alguns clientes FTP definitivamente permitirão que você baixe novos conteúdos de arquivos que você baixou anteriormente.

Particularmente com o WinSCP, basta iniciar um download do arquivo de log. Em seguida, no prompt de confirmação Substituir , selecione o Retomar (ele está 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 trapacear o WinSCP, criando um arquivo local fictício com um bit de tamanho 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 Crie rapidamente um arquivo grande 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.

    
por 17.01.2014 / 17:48
0

Eu não sei como você pode fazer isso usando o WinSCP, e na verdade pode não ser possível, mas em geral, você deve ser capaz de usar o REST . Veja RFC 3659 . Não está claro para mim se você pode iniciar o download no final do arquivo, ou se você já deve ter recebido os marcadores. RFC 3659 indica que isso é possível, pelo menos no modo STREAM, embora:

STREAM mode transfers with FILE STRUcture may be restarted even though no restart marker has been transferred in addition to the data itself. This is done by using the SIZE command, if needed, in combination with the RESTART (REST) command, and one of the standard file transfer commands.

    
por 17.01.2014 / 15:44
0

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

Aqui eu encontrei exemplo como obter todos os arquivos. Esta não é sua decisão, mas ajuda você a entender como fazer: link

outro, ajuda para a biblioteca Net :: FTP: link

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

segunda URL ajuda você a obter a última parte do arquivo usando métodos: - > ascii definir o modo de transferência para ascii porque este é logfile - > size (FILE) obtém o tamanho do arquivo para contar onde você deve começar - > restart (WHERE) defina o arquivo coursor de onde no arquivo que você deseja iniciar a leitura - > read (BUFFER, SIZE [ TIMEOUT]) leu diretamente a parte small SIZE na variável BUFFER

outras funções: length (BUFFER) informa quantos dados você recebe. Se é ZERO, você provavelmente alcançou o EOF print ("$ BUFFER \ n") conteúdo do buffer de impressão simples na tela

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

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

Se for possível, verifique se o site ftp suporta a retomada de download. Sem essa parte de leitura, o 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 de quão rápido o arquivo de log cresce.

    
por 17.01.2014 / 16:00