Назад | Перейти на главную страницу

Комплекс включает / исключает с помощью rsync

Я пытаюсь разработать синтаксис фильтра 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/*

Вы должны протестировать их, и вам может потребоваться внести некоторые коррективы, но это должно помочь вам начать.