lftp
tem um comando mirror
(e mirror -R
para o espelho inverso).
Estou à procura de qualquer solução que me permita emular funcionalidade semelhante ao Dropbox / rsync usando apenas o protocolo FTP e a linha de comando.
O problema geral é que eu tenho que executá-lo em um Linux muito limitado (na verdade, NAS), então não posso instalar / usar em soluções complexas (não há recursos suficientes para executar) e / ou utilitários GUI, já que não tem GUI lá. O SSH também funciona fraco nesse NAS e não está presente em nenhum dos destinos.
O que eu preciso é ter um script ou programa de linha de comando (bash) que eu possa executar periodicamente (via CRON) que garantirá que source
e destination
sejam idênticos:
Naturalmente, essa solução deve suportar iteração em todas as subpastas de origem e destino, para que isso funcione com sucesso - haverá uma estrutura de diretórios grande em ambos os lados.
Eu experimentei muitas soluções de backups, mas a maioria delas falhou por um desses motivos:
Fui aconselhado a usar o Unison e testá-lo bem. Isso realmente parece bom, mas usa SSH e não consigo estabelecer conexão SSH com um dos meus destinos (não suportado) - ou seja, o acesso FTP é a única maneira disponível.
A solução perfeita para mim seria qualquer coisa que eu pudesse executar (linha de comando ou configuração) assim:
something.sh path/to/local/folder ftp://user:[email protected]/path/to/folder
Se existe mesmo ...
lftp
tem um comando mirror
(e mirror -R
para o espelho inverso).
Uma coisa geral: até onde eu sei, o ftp não pode ser usado para definir o registro de data e hora remoto, porque isso não é suportado pelo protocolo. No entanto, está tudo bem no seu caso, já que você só quer ter certeza de que os dados que são mais recentes que os do servidor são transferidos, e o restante resta.
Eu acho que você pode usar rsync
com ftp usando fusível e curlftpfs. Primeiro, monte o sistema de arquivos ftp localmente:
curlftpfs -o user=username:password ftp://whatever.ftp/ mountpoint/
Em seguida, use rsync
da maneira usual para espelhos locais:
rsync -azv source mountpoint/whatever/dir/
O rsync é uma ferramenta poderosa com muitas opções para ajustar a sincronização de pastas e arquivos.
Outra opção: wput
; isso (escrito como uma contrapartida para wget) pode comparar as marcações de horário remotas e locais usando o - N opção. Além disso, wput recursivamente transfere os diretórios, então eu acho que esta é realmente a solução que você está procurando. Exemplo:
wput somedir ftp://user:[email protected]/remote/dir/
Irá criar um espelho de "somedir /" no servidor remoto. Se você executar novamente o comando sem modificar o somedir local, nenhum outro arquivo será transferido.