Rsync, включение только определенных типов файлов, исключая некоторые каталоги

Я просмотрел настройки Gnome и обнаружил следующее:

Перейдите в «Настройки» → «Сеть Bluetooth» → «Выключить»

Вуаля! Это сногсшибательное предложение немедленно исчезло.

12
13.04.2017, 15:36
1 ответ

venv / необходимо исключить перед * / включено:

rsync -avz --exclude='venv/' --include='*/' --include='*.py' --exclude='*' /tmp/src/ /tmp/dest/

Тонкость заключается в том, что rsync обрабатывает правила по порядку, и первое правило сопоставления побеждает. Итак, если - include = '* /' стоит перед - exclude = 'venv /' , тогда каталог venv / включен ] - include = '* /' и правило исключения никогда не используется.

Можно ли это упростить?

Зачем нам - include = '* /' и - exclude = '*' ? Почему недостаточно - exclude = venv / --include = '*. Py' ?

По умолчанию включаются файлы / каталоги. Итак, рассмотрим:

rsync -avz --exclude='venv/' --include='*.py' source target

Это будет включать все, кроме файлов или каталогов в venv / . Однако вам нужны только файлы .py . Это означает, что мы должны явно исключить другие файлы с помощью - exclude = '*' .

- exclude = '*' исключает как файлы, так и каталоги. Итак, если мы укажем - exclude = '*' , тогда все каталоги будут исключены, и будут найдены только файлы .py в корневом каталоге. Файлы .py в подкаталогах никогда не будут найдены, потому что rsync не просматривает исключенные каталоги. Таким образом, если у нас есть - exclude = '*' , нам нужно поставить перед ним - include = '* /' , чтобы обеспечить исследование содержимого всех каталогов.

26
27.01.2020, 19:55

Теги

Похожие вопросы