rsync: misturar excluir e incluir filtros

1

O seguinte padrão copia os arquivos .pdf da origem para o destino, funcionando bem.

rsync -rv --include="*.pdf" --include="*/" --exclude="*" --prune-empty-dirs /source/ ~/destination/

mas eu quero excluir os arquivos que contém web no nome do arquivo não está funcionando, é mesmo copiar o arquivo web_profile.pdf para o destino, porque é assim.

rsync -rv --include="*.pdf" --include="*/" --exclude="*web*.pdf" --exclude="*" --prune-empty-dirs /source/ ~/destination/

Também não estou claro sobre o diretório específico excluído como **/ (média de 2 estrelas e única estrela).

Alguém pode esclarecer minhas dúvidas sobre a correspondência de padrões no rsync.

--include="*.pdf" corresponde *pdf , se eu quiser excluir algum diretório como ../web-info/..pdf , como faço isso?

    
por Curious 15.12.2014 / 08:09

1 resposta

1

A ordem das opções --include e --exclude é relevante.

Você está primeiro incluindo todos os arquivos *.pdf , a exclusão posterior de *web*.pdf nunca se aplica por causa disso. Observe também que os padrões de inclusão / exclusão se aplicam a nomes de nós (arquivos, diretórios, etc.) e não a nomes de caminhos, a menos que você tenha um / ou ** no padrão; portanto, excluir *web*.pdf não excluiria ...web.../...pdf de qualquer maneira.

Se você quiser todos os PDFs, mas não os que estão em diretórios correspondentes a *web* , isso deve funcionar:

rsync -rv --exclude "*web*/" --include="*.pdf" --include="*/" --exclude="*" --prune-empty-dirs /source/ ~/destination/

Isso evitará que o rsync recursivo em diretórios correspondentes a *web* , inclua todos os arquivos *.pdf , inclua todos os outros diretórios, exclua todos os outros arquivos.

Usar ** no padrão também pode funcionar, embora eu prefira a solução acima:

rsync -rv --exclude "**web*.pdf" --include="*.pdf" --include="*/" --exclude="*" --prune-empty-dirs /source/ ~/destination/
    
por 15.12.2014 / 09:23

Tags