Eu quero transferir N arquivos de um sistema remoto usando um padrão:
ssh remote ls target/
2013-08-01.mjson.gz
2014-07-04.mjson.gz
2014-07-09.mjson.gz
2014-08-12.mjson.gz
...
Eu só quero os arquivos 2014-07*
. Minhas tentativas até agora:
rsync -a --dry-run --verbose --include="2014-07-*" remote:target .
# transfers everything
rsync -a --dry-run --verbose --include="2014-07-*" --exclude="*" remote:target .
# transfers nothing
rsync -a --dry-run --verbose --exclude="*" --include="2014-07-*" remote:target .
# transfers nothing
rsync -a --dry-run --verbose --include="*/2014-07-*" --exclude="*" remote:target .
# transfers nothing
rsync -a --dry-run --verbose --include="***/2014-07-*" --exclude="*" remote:target .
# transfers nothing
Eu sei que posso usar --files-from para indicar quais arquivos exatamente eu quero, mas é difícil de fazer.
Eu nunca entendi como usar corretamente a inclusão / exclusão para fazer o que eu quero. A página man afirma:
and the first matching pattern is acted on: if it is an exclude pattern, then that file is skipped; if it is an include pattern then that filename is not skipped; if no matching pattern is found, then the filename is not skipped.
Lendo isto, presumi que, se include fosse o primeiro, e o nome do arquivo fosse correspondido, então "nome do arquivo não é pulado" parte iria aparecer. Aparentemente, eu estou errado.
Mais abaixo na página man, eu vejo:
Note that, when using the --recursive (-r) option (which is implied by -a), every subcomponent of every path is visited from the top down, so include/exclude patterns get applied recursively to each subcomponent’s full name
Como usei --recursive
, isso causou que .
fosse ignorado devido à exclusão global?
Como faço para transferir um subconjunto de arquivos usando padrões de inclusão e exclusão?