Я хочу исключить все содержимое папки, но некоторые из ее подпапок, и я хочу сделать это только с одним файлом правил без добавления параметров командной строки --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
. Таким образом, файл правил будет значительно расти.