Você não poderá fazer isso corretamente a partir do bash sem a ajuda do seu cliente.
No lado do servidor FTP, vários servidores FTP têm métodos para executar um programa assim que um upload é finalizado (poderia ter sido terminado ou o cliente poderia ter sido desconectado, o servidor FTP não tem como saber se realmente foi feito ou não).
Para fazer isso da maneira certa, a melhor solução é fazer com que o cliente carregue o arquivo com um nome temporário e renomeie o arquivo assim que terminar com o nome correto. Então você exclui todos os arquivos chamados "whatever.tmp" do processamento. Caso contrário, faça o cliente fazer o upload de um arquivo de bloqueio de zero bytes, faça o upload do arquivo real e, em seguida, exclua o arquivo de bloqueio. Você pode então verificar a existência do arquivo de bloqueio
filelist = ...
if [ -e /home/ftp/incoming/lockfile ]; then exit; fi
... process $filelist ...
Se o cliente carregar muito, o arquivo de bloqueio pode estar lá toda vez que você executar o script e nada for feito. Nesse caso, você terá que verificar os registros de data e hora dos arquivos em relação ao arquivo de bloqueio. Arquivos mais antigos que o arquivo de bloqueio devem estar completos:
for f in ...; do
if [ ! -e /home/ftp/incoming/lockfile -o $f -ot /home/ftp/incoming/lockfile ]; then
... process $f
fi
done
Se nem o seu servidor FTP nem o seu cliente participar com você, você pode fazer algo como
- crie uma lista de arquivos e arquivos.
- Compare esta lista com a lista anterior de arquivos
- processa os arquivos na lista atual que são idênticos aos arquivos da lista anterior
- salva a lista atual de arquivos na lista anterior
- aguarde 5 minutos e volte para 1.
Arquivos que não ficaram maiores em 5 minutos provavelmente estão prontos. Fazer isso em bash
é deixado como um exercício para o leitor.