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

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

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

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

Mas isso apenas copia arquivos e não copia nenhuma pasta e não exclui. Você poderia me ajudar a melhorar o comando?

Responder1

Estritamente falando, o seguinte pode ser interpretado como objetivos contraditórios.

  1. faça backup de todos os arquivos no diretóriomas não arquivos aninhadosou seja, --exclude='*/'
  2. faça backup de certos diretórios - ou seja, inclua alguns arquivos aninhados

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

Por que seu comando não funcionou:

Da forma como o rsync processa seus argumentos de linha de comando, os argumentos a seguir são equivalentes a dizer --exclude='*/'

--excluir='/' --include='desired_subfolder/'

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

Este 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 para excluir esses arquivos no nível superior. No entanto, os arquivos um nível abaixo não são excluídos, pois já foram excluídos. É útil lembrar que --delete refere-se a --delete-during, não a --delete-before.

Soluções que satisfazem os itens 1, 3 e versão 2: A solução a seguir 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 backup de todos os arquivos e diretórios na profundidade 1, mas não dos arquivos aninhados. 2. Faça backup das pastas desejadas. 3. Exclui arquivos no destino que não estão na origem.

Outra escolha mais complicada é a seguinte

  rsync -vlptgoDd --delete src/ dest/

Isso satisfaz os itens 1 e 3, mas evita todos os arquivos aninhados (lembre-se de 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 os carimbos de data e hora (-t), incluí outras opções típicas para cópia de arquivos.

Uma maneira mais padrão de obter diferentes comportamentos de rsync em diferentes pastas é espalhar regras de filtro por diretório através da hierarquia; ou seja, crie arquivos .rsync-filter específicos para cada pasta que exija um comportamento único. Por exemplo

   rsync -avF src/ dest/

informação relacionada