Backup com bash e rsync

4

Existe uma maneira de renomear automaticamente um arquivo existente no receptor? Por exemplo: se filename já existir, renomeie automaticamente filename para algo como filename_001 , filename_002 e assim por diante ....

Até agora tudo o que tenho é isto:

$ rsync -rh --progress --stats --exclude '.thumb' \
    --update --perms /origin /destination

A propósito, eu sei que o rsync tem --ignore-existing para "pular arquivos de atualização que existem no receptor", mas eu acho que o que eu preciso seria algo como --rename-existing .

    
por Roger 01.07.2011 / 17:08

3 respostas

5

Se você deseja manter versões incrementais de um conjunto de dados (sem usar o controle de versão como a sugestão do git que seria a outra maneira alternativa de fazer isso) considere usar rsnap em vez de rsync .

Ele permitirá que você tire instantâneos de uma pasta ou conjunto de arquivos para que você possa restaurar o que a coisa toda como era em um determinado ponto no tempo. Em vez de salvar várias cópias de arquivos inteiros, ele deve salvar apenas as diferenças entre eles, economizando o espaço de ter todas essas duplicatas por aí.

Como ele usa o rsync para copiar os arquivos nos bastidores, você pode acrescentar opções de rsync ao final do comando. Por exemplo, na sua situação, para manter dez cópias de segurança, você poderia fazer algo assim:

$ rsnap 10 /origin /destination -- --progress --stats \
    --exclude '.thumb' --update --perms
    
por 01.07.2011 / 17:12
4

Existem as opções --backup e --suffix (pelo menos na v3.0.8), mas elas não conseguem o que você deseja, porque --suffix é fixo e não incrementa automaticamente ( cp tem um bom opção de sufixo de backup de incremento automático). O melhor que eu pude fazer foi usar um datetimestamp como o sufixo da seguinte forma:

SUFFIX='date '+%Y-%m-%d-%H:%M:%S''
rsync -rh --progress --stats --exclude '.thumb' \
  --backup --suffix="$SUFFIX" \
  --update --perms /origin /destination
    
por 01.07.2011 / 19:25
1

Eu também procuraria usar o git que é um software de controle de versão de código aberto. Há uma curva de aprendizado, mas parece que seria apropriado para o que você está tentando fazer. Ele também usa ssh, ftp e alguns outros protocolos de transferência. Uma boa ferramenta para espelhar repositórios, rastrear mudanças, etc. Ele também tem uma ótima documentação e uma canal de irc muito ativo ( webchat.freenode.net #git) se você ficar preso.

Boa sorte!

    
por 01.07.2011 / 18:51

Tags