Como rsync várias pastas de origem

10

Eu quero rsync várias fontes e gostaria de saber a melhor maneira de conseguir isso.

por exemplo,

/etc/fstab
/home/user/download

Eu pensei em 3 soluções:

  • Solução 1

chamada múltipla para o rsync

rsync -a /etc/fstab bkp
rsync -a /home/user/download bkp

con: mais difícil de ter status agregado

  • Solução 2

crie uma pasta tobackup que contenha symlink e use -L options

sync -aL /home/user/tobackup bkp

con: conteúdo para backup não deve conter links simbólicos

  • Solução 3

mova os arquivos para o backup e crie o symlink no local original

rsync -a /home/user/tobackup bkp

con: alguma configuração manual

Qual deles você recomenda?

Existe uma maneira melhor?

    
por user1437346 31.05.2017 / 01:21

1 resposta

12

Você pode passar vários argumentos de origem.

rsync -a /etc/fstab /home/user/download bkp

Isso cria bkp/fstab e bkp/download , como os comandos separados que você deu. Pode ser desejável preservar a estrutura de origem. Para fazer isso, use / como a fonte e use include -exclua as regras para especificar quais arquivos copiar. Existem duas maneiras de fazer isso:

  • Inclua explicitamente cada arquivo, bem como cada componente de diretório que o leva, com /*** no final dos diretórios quando quiser copiar toda a árvore de diretórios:

    rsync -a \
        --include=/etc --include=/etc/fstab \
        --include=/home --include=/home/user --include='/home/user/download/***' \
        --exclude='*' / bkp
    
  • Inclua todos os diretórios de nível superior com /*/ (para que o rsync percorra /etc e /home ao procurar arquivos para copiar) e diretórios de segundo nível com /*/*/ (para /home/user ), mas desmarque diretórios nos quais nenhum arquivo é copiado. Isso é mais conveniente porque você não precisa listar os pais explicitamente. Você poderia até usar --prune-empty-dirs --include='*/' em 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, embora nenhuma das regras de inclusão possa corresponder a nada fora de /etc e /home/user/download . / p>

    rsync -a --prune-empty-dirs \
        --include='/*/' --include='/*/*/' \
        --include=/etc/fstab \
        --include='/home/user/download/***' \
        --exclude='*' / bkp
    
por 31.05.2017 / 01:54

Tags