rsync comando para fazer backup de arquivos no diretório principal e em determinados diretórios com exclusão

0

Eu tento preparar o comando rsync que irá: 1. backup de todos os arquivos no diretório, mas não os arquivos aninhados 2. backup de determinados diretórios 3. excluir arquivos no diretório de destino quando eles são excluídos na fonte

rsync -vtr --delete --exclude='*/' --include='includes/*' --include='js/*' --include='css/*' /home/gameboy/abc/* /home/gameboy/PartialMirror/abc/

Mas isso só copia arquivos e não copia pastas e não faz exclusões. Você poderia me ajudar a melhorar o comando?

    
por trzczy 25.04.2017 / 03:52

1 resposta

1

Estritamente falando, o seguinte pode ser interpretado como metas contraditórias.

  1. backup de todos os arquivos no diretório , mas não arquivos aninhados , por exemplo --exclude = '* /'
  2. backup de determinados diretórios - por exemplo, incluir alguns arquivos aninhados

Por favor, veja abaixo uma explicação sobre por que seus argumentos não funcionaram como você pretendia. Mais abaixo, veja uma alternativa adequada que pode ser adequada ao seu propósito (satisfaz # 1, # 3 e uma versão do # 2).

Por que seu comando não funcionou:

A maneira como o rsync processa seus argumentos de linha de comando, os seguintes argumentos são equivalentes a dizer --exclude = '* /'

--exclude='/' --include='desired_subfolder/'

, ou seja, seu comando excluiu todos os arquivos aninhados, excluindo os arquivos nas subpastas desejadas também.

Esse problema afeta sua segunda observação, ou seja, que os arquivos no destino que são excluídos na origem não estão sendo excluídos. Na verdade, seu comando funciona perfeitamente na exclusão desses arquivos no nível superior. No entanto, os arquivos de um nível abaixo não são excluídos, pois já estão excluídos. É bom lembrar que --delete se refere a --delete-during, não --delete-before.

Soluções que satisfazem o # 1, # 3 e a versão # 2: A seguinte solução pode atender às suas necessidades

rsync -avz --delete --include='includes/*' --include='js/*' --include='css/*' --exclude='*/*' /home/gameboy/abc/ /home/gameboy/PartialMirror/abc/

Ele satisfaz o seguinte:  1. Faz o backup de todos os arquivos e diretórios na profundidade 1, mas não arquivos aninhados.  2. Faça o backup das pastas desejadas  3. Exclui arquivos no destino que não estão na origem.

Outra opção mais complicada é a seguinte

  rsync -vlptgoDd --delete src/ dest/

Isto satisfaz # 1 e # 3, mas evita todos os arquivos aninhados (lembre-se que as pastas também são arquivos em * nix). Evitei dar a opção -r, por isso não é recursiva. Excluir trabalhos e pastas na profundidade 1 são copiados. Além de preservar timestamps (-t), incluí as outras opções típicas para cópia de archive.

Uma maneira mais padrão de obter diferentes comportamentos de rsync em diferentes pastas é aplicar as regras de filtragem em uma forma por diretório, por meio da hierarquia; isto é, crie arquivos .rsync-filter específicos para cada pasta que exigir um comportamento único. Por exemplo

   rsync -avF src/ dest/
    
por 25.04.2017 / 06:18