O que é uma maneira confiável de automatizar o upload de FTP do 'novo arquivo no diretório X'?

4

Eu tenho esta pasta cheia de arquivos.

Uma vez por dia, quero que o mais novo dos arquivos seja enviado por FTP automaticamente para um servidor de arquivos.

    
por BigOmega 09.05.2012 / 22:46

2 respostas

3

Faça um pequeno script, obtenha o nome do arquivo através desta linha:

newestfilename='ls -t $dir| head -1'

(assumindo que $dir é o diretório em que você está interessado), então alimente $filename ao seu comando FTP e, é claro, cron este script para ser executado uma vez por dia.

Se você tiver ncftp , poderá usar o seguinte comando para ftp do arquivo:

ncftpput -Uftpuser -Pftppasswd ftphost /remote/path $dir/$newestfilename

Sem o ncftp, isso pode funcionar:

ftp -u ftp://username:[email protected]/path/to/remote_file $dir/$newestfilename
    
por 09.05.2012 / 23:14
1

Localizando o arquivo mais recente

A maneira mais fácil de encontrar o arquivo mais novo em um diretório é usar o zsh e seus qualificadores glob om para classificar por hora de modificação e [1] para escolher a correspondência mais recente.

upload /path/to/dir/*(om[1])

Não há método bom e portátil. O único método portátil é usar ls -t para listar arquivos por data e analisar o resultado, mas analisar ls está repleto de perigos . Faça isso apenas se tiver certeza de que os nomes dos arquivos não contêm novas linhas ou caracteres não imprimíveis.

upload "$(ls -t /path/to/dir | head -n 1)"

Upload de FTP

Para o upload, existem muitas ferramentas. Um normalmente instalado é o curl .

curl -T /path/to/local/file ftp://ftp.example.com/remote/dir

Outra abordagem é montar o diretório remoto como um sistema de arquivos, por exemplo, com curlftpfs .

mkdir ftp.example.com
curlftpfs ftp.example.com ftp.example.com
cp -p /path/to/local/file ftp.example.com/remote/dir/

Automatizando a tarefa

Adicione uma entrada crontab para executar a tarefa todos os dias. Execute crontab -e e adicione uma linha como esta:

SHELL=/bin/zsh
42 3 * * * curl -T /path/to/dir/*(om[1]) ftp://ftp.example.com/remote/dir
    
por 10.05.2012 / 03:01

Tags