Estou começando rsync
e tentei usá-lo para manter duas pastas no sistema local sincronizadas. Eu tenho uma pasta de origem, cujo conteúdo muda com o tempo (alguns arquivos são adicionados, algumas alterações e outras excluídas) e uma pasta de destino que eu quero quase ser um espelho da fonte. Então, o que eu tentei foi usar o rsync assim:
rsync -a --delete "${source_dir}" "${target_dir}";
Isso mantém o conteúdo do destino exatamente igual ao conteúdo da fonte. No entanto, gostaria de poder adicionar alguns arquivos ao destino e não ao código-fonte, mas não quero que eles sejam excluídos toda vez que fizer o rsync. Por outro lado, os arquivos que costumavam ser sincronizados e depois excluídos na fonte ainda devem ser excluídos.
Existe uma maneira de fazer isso sem ter que alterar o comando para todos os arquivos que eu quero excluir?
Atualização : devo mencionar que não estou limitado ao rsync. Se outro programa concluir o trabalho, tudo bem também. Eu apenas tentei resolver isso usando o rsync.
Respostas:
rsync
possui uma opção chamada--exclude-from
opção que permite criar um arquivo contendo uma lista de todos os arquivos que você deseja excluir. Você pode atualizar esse arquivo sempre que desejar adicionar uma nova exclusão ou remover uma antiga.Se você criar o arquivo de exclusão no
/home/user/rsync_exclude
novo comando, seria:Ao criar o arquivo da lista de exclusões, você deve colocar cada regra de exclusão em uma linha separada. As exclusões são relativas ao seu diretório de origem. Se o seu
/home/user/rsync_exclude
arquivo contiver as seguintes opções:secret_file
no seu diretório de origem será excluído.${source_dir}/first_dir/subdir
serão excluídos, mas uma versão vazia dosubdir
será sincronizada.${source_dir}/second_dir
com um prefixo decommon_name.
será ignorado. Entãocommon_name.txt
,common_name.jpg
etc.fonte
Desde que você mencionou: não estou limitado ao rsync:
Script para manter o espelho, permitindo adicionar arquivos extras ao destino
Abaixo de um script que faz exatamente o que você descreve.
O script pode ser executado no modo detalhado (a ser definido no script), o que produzirá o progresso do backup (espelhamento). Não é necessário dizer que isso também pode ser usado para registrar os backups:
Opção detalhada
O conceito
1. No primeiro backup, o script:
.recentfiles
2. No backup seguinte e assim por diante
.currentfiles
..recentfiles
(listando a situação no backup anterior) é comparado a.currentfiles
. Somente arquivos dos.recentfiles
quais não estão.currentfiles
estão são obviamente removidos da fonte e serão removidos do destino..currentfiles
é renomeado.recentfiles
para servir o próximo ciclo de backup e assim por diante.O script
Como usar
backup_special.py
Altere, se desejar, a opção detalhada no cabeçalho do script:
Execute-o com origem e destino como argumentos:
Rapidez
Testei o script em um diretório de 10 GB com cerca de 40.000 arquivos e diretórios na minha unidade de rede (NAS), ele fez o backup praticamente ao mesmo tempo que o rsync.
A atualização do diretório inteiro levou apenas alguns segundos a mais do que o rsync, em 40.000 arquivos, o que é quase aceitável e não surpreende, pois o script precisa comparar o conteúdo com o último backup feito.
fonte