Я хочу исключить все содержимое папки, но некоторые из ее подпапок, и я хочу сделать это только с одним файлом правил без добавления параметров командной строки --exclude или --include . Это возможно? Один файл правил важен, потому что мне легче поддерживать и документировать.
Я запускаю следующую команду
rsync -a -F --filter "merge backup-filter" /mnt/home/common /mnt/backup
с файловым backup-filter:
# non-rooted rules take precedence
+ .git/*
+ .gitignore
- .*.sw?
# rooted rules
+ /common/backup*
- /common/opt/
+ /common/usr/
# FIXME
+ /common/root/startup/*
+ /common/root/.config/gopt/*
- /common/root/*
И два .rsync-filter
# cat ./usr/bin/.rsync-filter
# Assume command-line option --filter=':- .gitignore', which
# backs up all file/folders that aren't listed in ./.gitignore
# cat ./usr/.rsync-filter
+ usr/bin
- */
Блок правил, начинающийся с FIXME является ломаной. Он предназначен для исключения всего содержимого /common/root но позволяет копировать содержимое startup и .config/gopt . Это сломано, потому что startup и .config/gopt не копируются.
Со временем я планирую добавить больше исключенных путей на разных уровнях и некоторые включенные подпути, как я делаю здесь для пути /common/root . Таким образом, файл правил будет значительно расти.
