Duas cópias exatas da pasta usando somente FTP e linha de comando

1

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:

  • todos os arquivos em ambos os lados copiados para os dois lados,
  • se dois arquivos com o mesmo nome existirem, copie a versão mais recente de um arquivo para os dois lados,
  • exclua de um lado todos os arquivos que estão faltando em outro.

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:

  • incapaz de criar cópias duplicadas exatas de ambos os lados e oferecer backup incremental,
  • não pode ser executado diretamente da linha de comando, em uma distribuição Linux muito limitada.

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 ...

    
por trejder 09.10.2012 / 12:30

2 respostas

2

lftp tem um comando mirror (e mirror -R para o espelho inverso).

    
por 09.10.2012 / 13:02
2

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.

    
por 09.10.2012 / 12:34

Tags