Ответ 1
rsync
не работает. Предполагается, что любой файл с шаблоном имени файла, который не соответствует ни одному из включенных или исключающих шаблонов, считается включенным. Другими словами, подумайте о включении шаблона в качестве способа переопределения шаблона исключения.
Из docs:
Rsync создает упорядоченный список опций include/exclude, как указано в командной строке. Rsync поочередно проверяет каждый файл и имя каталога по каждому шаблону exclude/include. Выполняется первый шаблон соответствия. Если это шаблон исключения, то этот файл пропускается. Если это шаблон включения, то это имя файла не пропускается. Если не найдено совпадающего шаблона include/exclude, имя файла не пропускается.
(Акцент мой)
Итак, если вы хотите включить только определенные файлы, сначала нужно включить эти конкретные файлы, а затем исключить все остальные файлы:
--include="*/" --include="*.cfg" --exclude="*"
Несколько вещей, чтобы отметить здесь:
-
Шаблоны
include
должны появиться перед исключениями, потому что первый шаблон, который соответствует, является тем, который рассматривается. Если имя файла сначала совпадает с шаблоном исключения, оно исключается. -
Вам нужно либо включить все подкаталоги отдельно, например,
--include="/opt" --include="/opt/dir1"
и т.д. для всех подкаталогов, либо использовать --include = "*/" для включения всех каталогов (а не файлов). Я пошел со вторым вариантом для краткости.
Это изворотливое и не очень интуитивное. Поэтому внимательно прочитайте docs (раздел "ИСКЛЮЧИТЬ ШАБЛОНЫ" в ссылке) и используйте параметр --dry-run
или -n
, чтобы убедиться, что это будет делать то, что вы думаете, что он должен делать.