Я пытаюсь разработать синтаксис фильтра rsync для выполнения сложных включений / исключений и пытаюсь достичь следующего:
Include /
Exclude /home
Include /home/user1/*
Include /home/user2/subdir/*
Я пробовал много вариантов синтаксиса фильтра и, несмотря на то, что много раз читал справочную страницу, не мог добиться такого эффекта. Фильтры Rsync кажутся очень мощными, и мне трудно поверить, что они не справятся с таким распространенным сценарием, как этот.
Перед использованием правила исключения вам необходимо включить все родительские каталоги до нужного каталога.
Например, в сценарии резервного копирования я использую следующее:
rsync -av \
--filter='+ /var/' \
--filter='+ /var/backups/' \
--filter='- /var/*' \
/ \
$DEST
Итак, в вашем случае вам понадобится что-то вроде следующего:
rsync -av \
--filter='+ /home/' \
--filter='+ /home/user1/' \
--filter='+ /home/user2/' \
--filter='+ /home/user2/subdir/' \
--filter='- /home/user2/*' \
--filter='- /home/*' \
/ \
$DEST
В командной строке:
rsync --dry-run --verbose --recursive --include=/home/user1 --exclude=/home/* / DEST
удалять --dry-run
чтобы сделать его функциональным, замените «DEST» на место назначения и добавьте пользователя и хост к источнику «/», если необходимо.
Из файла правил:
rsync --dry-run --verbose --recursive --filter='merge /etc/rsync/somerules.rules' / DEST
где содержимое /etc/rsync/somerules.rules
возможно:
+/ /home/user1
-/ /home/*
Вы должны протестировать их, и вам может потребоваться внести некоторые коррективы, но это должно помочь вам начать.