На страницах руководства нет примеров для этого. Мне сложно заставить rsync включать только некоторые файлы, где эти файлы. Я не понимаю, почему нужно исключать, чтобы включить, почему просто rsync
не включать то, что есть во включаемом файле, и что все остальное будет исключено.
Вот мой сценарий:
rsync -ruv --rsh=ssh --include-from=zz-rsync-test.prod.incl /usr2/subdir remoteSrv:/tmp/.
и это мой include-файл, который не работает: Он копирует слишком много: он копирует все в /usr2/subdir (включая каталог subdir
, странно), что мне не нужно. Я хочу скопировать только файлы per, 42f и xml в каталоге data/text_forms
.
+ data/text_forms/*.per
+ data/text_forms/*.42f
+ data/text_forms/*.xml
+ data/text_forms/*.xml.*
и следующее не работает, ничего не копируется:
- *
+ data/text_forms/*.per
+ data/text_forms/*.42f
+ data/text_forms/*.xml
+ data/text_forms/*.xml.*
и следующее тоже не работает, ничего не копируется:
- *
+ data/
+ data/text_forms/*.per
+ data/text_forms/*.42f
+ data/text_forms/*.xml
+ data/text_forms/*.xml.*
и следующее тоже не работает, ничего не копируется:
- *
+ data/
+ data/text_forms/
+ data/text_forms/*.per
+ data/text_forms/*.42f
+ data/text_forms/*.xml
+ data/text_forms/*.xml.*
Следующее тоже не работает:
+ */
+ /data/text_forms/*.per
+ /data/text_forms/*.42f
+ /data/text_forms/*.xml
+ /data/text_forms/*.xml.*
- *
Ни один из следующих вариантов не работает:
+ /data/
+ /data/text_forms/
+ /data/text_forms/*.per
+ /data/text_forms/*.42f
+ /data/text_forms/*.xml
+ /data/text_forms/*.xml.*
- *
решение1
Я нашел решение. Мне потребовалось целых два дня, чтобы найти его. Надеюсь, это поможет вам не тратить так много времени.
Первая проблема заключалась в том, что подкаталог был subdir
включен /usr2/subdir
, а я не хотел включать весь этот каталог, я просто хотел, чтобы он был базовым каталогом, поэтому в конце требуется слеш, как в /usr2/subdir/
, поэтому моя новая команда выглядит так:
rsync -ruvv --rsh=ssh --include-from=zz-rsync-test.prod.incl /usr2/subdir/ remoteSrv:/tmp/.
Обратите внимание, что я добавил дополнительную v
опцию в командной строке ( -ruvv
), чтобы получить больше информации о том, что было исключено или включено в момент запуска команды. С фиксированным базовым каталогом и дополнительным v
стало немного проще построить правильный включаемый файл:
+ data/
+ data/text_forms/
+ data/text_forms/*.per
+ data/text_forms/*.42f
+ data/text_forms/*.xml
+ data/text_forms/*.xml.*
- *
Все +
строки должны быть размещены перед - *
, особенно для каталогов, поскольку мне пришлось явно включить каждый каталог для сканирования, даже если я не хочу получать файлы непосредственно внутри этих каталогов. Я провел тест, добавив a data/anyTestFile1
и a, data/text_forms/anyTestFile2
потому что я не был уверен, будут ли они извлечены, но этого не произошло, так что это делает то, что я хочу.... наконец-то.