3

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

1 ответ1

1

Ты нуждаешься в этом:

+ /common/root/startup/
+ /common/root/startup/*
+ /common/root/.config/
+ /common/root/.config/gopt/
+ /common/root/.config/gopt/*
- /common/root/.config/*
- /common/root/*

Или, может быть, это, если вы не хотите переопределять более поздние правила, относящиеся к файлу:

+ /common/root/startup/
+ /common/root/.config/
+ /common/root/.config/gopt/
- /common/root/.config/*
- /common/root/*

Проблема заключалась в том, что он никогда не возвращался в startup или .config потому что - /common/root/* запретил.

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

Другой трюк состоит в том, чтобы включить все каталоги с + */ в верхней части, а затем исключить ненужные файлы с - /common/root/** . Затем вы можете привести в порядок беспорядок пустых каталогов с помощью --prune-empty-dirs , но имейте в виду, что это приведет к созданию действительно пустых каталогов, а также тех, содержимое которых вы решили исключить.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .