Voglio trasferire N file da un sistema remoto, usando un modello:
ssh remote ls target/
2013-08-01.mjson.gz
2014-07-04.mjson.gz
2014-07-09.mjson.gz
2014-08-12.mjson.gz
...
Voglio solo i 2014-07*
file. I miei tentativi finora:
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
So che posso usare --files-from per indicare quali file voglio esattamente, ma è una seccatura da fare.
Non ho mai capito come usare correttamente include / exclude per fare quello che voglio. La pagina man afferma:
e si agisce sul primo modello di corrispondenza: se si tratta di un modello di esclusione, quel file viene ignorato; se si tratta di un modello di inclusione, quel nome file non viene ignorato; se non viene trovato alcun modello corrispondente, il nome file non viene ignorato.
Leggendo questo, ho presunto che se includesse prima, e il nome del file corrispondesse, allora la parte "nome del file non viene ignorato" avrebbe avuto inizio. Apparentemente, mi sbaglio.
Più in basso nella pagina man, vedo:
Si noti che, quando si utilizza l'opzione --recursive (-r) (che è implicita da -a), ogni sottocomponente di ogni percorso viene visitato dall'alto verso il basso, quindi i modelli di inclusione / esclusione vengono applicati ricorsivamente al nome completo di ciascun sottocomponente
Da quando l'ho usato --recursive
, quella causa è .
stata saltata, a causa dell'esclusione globale?
Come trasferisco un sottoinsieme di file usando i modelli di inclusione ed esclusione?