Acho que --include
é usado para incluir um subconjunto de arquivos que são excluídos por --exclude
, em vez de incluir apenas esses arquivos. Em outras palavras: você tem que pensar em incluir significado , não excluir .
Em vez disso, tente:
rsync -zarv --include "*/" --exclude="*" --include="*.sh" "$from" "$to"
Para rsync versão 3.0.6 ou superior, o pedido precisa ser modificado da seguinte forma (veja os comentários):
rsync -zarv --include="*/" --include="*.sh" --exclude="*" "$from" "$to"
Adicionar o -m
sinalizador evitará a criação de estruturas de diretório vazias no destino. Testado na versão 3.1.2.
Portanto, se quisermos apenas arquivos * .sh, temos que excluir todos os arquivos --exclude="*"
, incluir todos os diretórios --include="*/"
e incluir todos os arquivos * .sh --include="*.sh"
.
Você pode encontrar alguns bons exemplos na seção Regras de padrão de inclusão / exclusão da página do manual