FTP: obtenha o arquivo mais recente em sever

1

Isso é realmente muito chato. Eu tenho um servidor ftp em execução e gera irregularmente o arquivo mais recente. O arquivo é armazenado como:

Home - > T22:30:10 - > new.txt , e a mais recente seria (uma nova pasta)

Home - > T23:10:25 - > new.txt (note que esta é uma nova pasta com a última hora)

Eu preciso implementar algo (pode ser qualquer coisa, código C, script bash, etc) em uma máquina Linux que extraia o arquivo mais recente.

Eu olhei em duas opções:

Opção 1. Use libcurl, passe a listagem de diretórios e selecione o arquivo mais recente. Isso é muito chato e demorado e ainda não consigo encontrar uma maneira fácil de fazer isso.

Opção 2. Use o lftp, na inicialização, remova todos os arquivos no servidor, para que cada vez que eu chamo o lftp para fazer o download de alguma coisa, seja o mais recente. (Este método é apenas idealização e eu não tentei na vida real).

Existe alguma opção mais fácil?

    
por andy_ttse 25.03.2015 / 17:21

2 respostas

1

Uma abordagem que geralmente é conveniente é montar os arquivos e depois acessá-los como se fosse acessar arquivos locais comuns. Para um servidor que você acessa através do FTP, você pode usar o CurlFtpFS .

mkdir theserver
curlftpfs theserver.example.com theserver

Você precisará passar o nome de usuário e a senha para o curlftpfs, na linha de comando (que não é segura, como outros usuários da sua máquina poderão vê-los) ou no arquivo ~/.netrc (altamente recomendado). Aqui está uma amostra da linha netrc:

machine theserver.example.com login remoteusername password swordfish

Agora que montou o servidor FTP como um diretório em sua máquina, você pode usar os comandos usuais, como ls , cp etc. Por exemplo, para copiar o arquivo do diretório que vem por último em ordem lexicográfica (deve estar ok se seus nomes de arquivos realmente contiverem a data antes do horário):

set -- theserver/remote/path/T*
eval "last=\${$#}"
cp -p -- "$last/new.txt" "/some/where/local/${last##*/}.txt"

Ou para copiar o arquivo mais recente, supondo que os nomes de arquivo envolvidos não contenham caracteres não imprimíveis ou novas linhas:

cd theserver/remote/path
last=$(ls -t -- T*/new.txt | head -n 1)
cp -p -- "$last" "/some/where/local/${last%/*}.txt"
    
por 26.03.2015 / 01:46
1

Se você está certo em executar periodicamente um script, você pode utilizar wget -N , consulte:

link

Você pode criar um script como:

cd /var/download_here/
wget -N ftp://example.com/new.txt --ftp-user="my_user" --ftp-password="my_password"

Adicione crontab como:

*/5 *   * * *   /path/to_script

Por favor, tome em consideração como é o arquivo de origem criado. Se algo estiver gravando nele e o arquivo não estiver bloqueado, você pode acabar baixando o arquivo incompleto.

    
por 25.03.2015 / 17:31