Estritamente falando, o seguinte pode ser interpretado como metas contraditórias.
- backup de todos os arquivos no diretório , mas não arquivos aninhados , por exemplo --exclude = '* /'
- 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/