Complexo inclui / exclui com rsync

12

Estou tentando descobrir a sintaxe do filtro rsync para executar inclusões / exclusões complexas e tentar alcançar o seguinte:

Include /
Exclude /home
Include /home/user1/*
Include /home/user2/subdir/*

Eu tentei muitas variações na sintaxe do filtro, e apesar de ler a página man muitas vezes, não consigo obter esse tipo de efeito. Os filtros Rsync parecem ser muito poderosos, e acho difícil acreditar que eles não poderiam lidar com um cenário comum como este.

    
por brianmathis 11.06.2010 / 00:50

2 respostas

14

Você precisa incluir todos os diretórios pai no diretório desejado antes de usar a regra de exclusão.

Por exemplo, eu uso o seguinte em um script de backup:

rsync -av \ 
--filter='+ /var/' \
--filter='+ /var/backups/' \
--filter='- /var/*' \
/ \
$DEST

Então, no seu caso, você precisaria de algo como o seguinte:

rsync -av \ 
--filter='+ /home/' \
--filter='+ /home/user1/' \
--filter='+ /home/user2/' \
--filter='+ /home/user2/subdir/' \
--filter='- /home/user2/*' \
--filter='- /home/*' \
/ \
$DEST
    
por 11.06.2010 / 19:14
6

Na linha de comando:

rsync --dry-run --verbose --recursive --include=/home/user1 --exclude=/home/* / DEST

Remova --dry-run para torná-lo funcional, substitua "DEST" pelo seu destino e adicione usuário e host à origem "/", se necessário.

De um arquivo de regras:

rsync --dry-run --verbose --recursive --filter='merge /etc/rsync/somerules.rules' / DEST

onde o conteúdo de /etc/rsync/somerules.rules pode ser:

+/ /home/user1
-/ /home/*

Você deve testá-los e talvez seja necessário fazer alguns ajustes, mas isso deve começar.

    
por 11.06.2010 / 01:51

Tags