Я хочу передать N файлов из удаленной системы, используя шаблон:
ssh remote ls target/
2013-08-01.mjson.gz
2014-07-04.mjson.gz
2014-07-09.mjson.gz
2014-08-12.mjson.gz
...
Я хочу только файлы 2014-07*
. Мои попытки пока:
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
Я знаю, что могу использовать --files-from, чтобы указать, какие именно файлы мне нужны, но это сложно.
Я никогда не понимал, как правильно использовать include/exclude, чтобы делать то, что я хочу. Страница руководства гласит:
и действует первый соответствующий шаблон: если это шаблон исключения, то этот файл пропускается; если это шаблон включения, то это имя файла не пропускается; если соответствующий шаблон не найден, то имя файла не пропускается.
Читая это, я предположил, что если сначала было включено include, а имя файла совпало, то тогда включилась бы часть "имя файла не пропущено". Видимо, я не прав.
Ниже на странице руководства я вижу:
Обратите внимание, что при использовании параметра --recursive (-r) (что подразумевается под -a) каждый субкомпонент каждого пути посещается сверху вниз, поэтому шаблоны include/exclude рекурсивно применяются к полному имени каждого субкомпонента
Так как я использовал --recursive
, сделал это причиной .
быть пропущенным из-за глобального исключения?
Как передать подмножество файлов, используя шаблоны включения и исключения?