Quero sincronizar várias fontes e me pergunto a melhor maneira de conseguir isso.
por exemplo
/etc/fstab
/home/user/download
Pensei em 3 soluções:
- Solução 1
chamada múltipla para rsync
rsync -a /etc/fstab bkp
rsync -a /home/user/download bkp
con: mais difícil de ter estatísticas agregadas
- Solução 2
crie uma tobackup
pasta que contém o link simbólico e use as -L
opções
sync -aL /home/user/tobackup bkp
con: o conteúdo do backup não deve conter links simbólicos
- Solução 3
mover arquivos para o backup e criar o link simbólico no local original
rsync -a /home/user/tobackup bkp
con: alguma configuração manual
Qual você recomenda?
Existe uma maneira melhor ?
Respostas:
Você pode passar vários argumentos de origem.
Isso cria
bkp/fstab
ebkp/download
, como os comandos separados que você deu. Pode ser desejável preservar a estrutura de origem. Para fazer isso, use/
como fonte e use regras de inclusão-exclusão para especificar quais arquivos copiar. Existem duas maneiras de fazer isso:Inclua explicitamente cada arquivo, bem como cada componente de diretório que o conduz,
/***
no final dos diretórios, quando você deseja copiar toda a árvore de diretórios:Inclua todos os diretórios de nível superior com
/*/
(para que o rsync atravesse/etc
e/home
ao procurar arquivos para copiar) e os diretórios de segundo nível com/*/*/
(para/home/user
), mas retire os diretórios nos quais nenhum arquivo é copiado. Isso é mais conveniente porque você não precisa listar os pais explicitamente. Você pode até usar em--prune-empty-dirs --include='*/'
vez de contar o número de níveis, mas isso é impraticável aqui, pois o rsync percorre todo o sistema de arquivos para explorar diretórios, mesmo que nenhuma das regras de inclusão possa corresponder a nada fora/etc
e/home/user/download
.fonte
Eu realmente gosto da resposta de Gilles, no entanto, gostaria de acrescentar que, na minha opinião, o requisito de sincronizar várias pastas enquanto preserva a estrutura de diretórios é melhor atendido passando vários argumentos de origem em conjunto com a
--relative
opção.Nesse caso, poderíamos ter o seguinte:
o que resultaria
bkp/etc/fstab
ebkp/home/user/download
.A melhor parte disso é que (acredito que desde o rsync v. 2.6.7) podemos essencialmente controlar quanto da estrutura de diretórios queremos replicar no receptor.
(Veja a documentação na
--relative
opção aqui )Então, por exemplo, se fizermos isso
nós acabaríamos com
bkp/user1/download
ebkp/user2/download
.fonte
Isso também funciona - chaves, contendo lista de fontes separadas por vírgula.
Um pouco semelhante ao que acontece quando você invoca chavetas sytnax com o cp e alguns outros utilitários:
fonte
-e