O Rsync copia a (s) origem (s) para o destino. Se você passar *.pdf como origens, o shell expandirá isso para a lista de arquivos com a extensão .pdf no diretório atual. Nenhuma travessia recursiva acontece porque você não passou nenhum diretório como fonte.
Portanto, você precisa executar rsync -a ~/LaTeX/ ~/Output/ , mas com um filtro para informar ao rsync para copiar somente arquivos .pdf . As regras de filtragem do Rsync podem parecer assustadoras quando você lê o manual, mas você pode construir muitos exemplos com apenas algumas regras simples.
-
Inclusões e exclusões:
- A exclusão de arquivos por nome ou por local é fácil:
--exclude=*~,--exclude=/some/relative/location(relativo ao argumento de origem, por exemplo, isso exclui~/LaTeX/some/relative/location). - Se você quiser corresponder apenas alguns arquivos ou locais, inclua-os, inclua todos os diretórios que levam a eles (por exemplo, com
--include=*/) e exclua o restante com--exclude='*'. Isso porque: - Se você excluir um diretório, isso excluirá tudo abaixo dele. Os arquivos excluídos não serão considerados.
- Se você incluir um diretório, isso não incluirá automaticamente seu conteúdo. Nas versões recentes,
--include='directory/***'fará isso. - Para cada arquivo, a primeira regra de correspondência se aplica (e qualquer coisa nunca correspondida é incluída).
- A exclusão de arquivos por nome ou por local é fácil:
-
Padrões:
- Se um padrão não contiver um
/, ele será aplicado ao diretório sans do nome do arquivo. - Se um padrão terminar com
/, ele será aplicado apenas aos diretórios. - Se um padrão começar com
/, ele será aplicado a todo o caminho do diretório que foi passado como um argumento pararsync. -
*de qualquer substring de um único componente de diretório (isto é, nunca corresponde a/);**corresponde a qualquer substring de caminho.
- Se um padrão não contiver um
-
Se um argumento de origem terminar com
/, seu conteúdo será copiado (rsync -r a/ bcriab/foopara cadaa/foo). Caso contrário, o próprio diretório será copiado (rsync -r a bcriab/a).
Assim, aqui precisamos incluir *.pdf , incluir diretórios que os contenham e excluir todo o resto.
rsync -a --include='*.pdf' --include='*/' --exclude='*' ~/LaTeX/ ~/Output/
Observe que isso copia todos os diretórios, mesmo aqueles que não contêm nenhum arquivo ou subdiretório correspondente contendo um. Isso pode ser evitado com a opção --prune-empty-dirs (não é uma solução universal, já que você não pode copiar um diretório nem mesmo combinando-o explicitamente, mas esse é um requisito raro).
rsync -am --include='*.pdf' --include='*/' --exclude='*' ~/LaTeX/ ~/Output/