rsync определенные файлы, исключая остальные, игнорируя каталог.svn/, рекурсивно
Я использую rsync для копирования некоторых файлов из общего ресурса в другой.
Рекурсивно мне нужно:
- Удалить файлы в месте назначения, которые были удалены из источника
- Синхронизировать только php и js файлы
- Исключить все остальные типы файлов
- Не удаляйте
.svn/
каталоги в пункте назначения
Если я использую это:
rsync -zavC --delete --include='*.php' --include='*.js' --exclude="*" \
/origiin /destination
Тогда rsync не является рекурсивным, потому что exclude="*"
исключает все файлы, но также папки
Если я добавлю --include="*/"
тогда .svn/
каталог удаляется (также включается)
Как я могу решить эту умопомрачительную дилемму?
uname -a:
Linux tux 3.9.2-1-ARCH # 1 ПРЕДСТАВЛЕНИЕ SMP Сб 11 мая 20:31:08 CEST 2013 x86_64 GNU/Linux
версия rsync:
rsync 3.0.9-6
заранее спасибо
1 ответ
Решение
Хорошо, после нескольких попыток я разобрался с этим:
rsync -vaiz --delete --exclude=.svn/ --include='*.php' --include='*.js' \
--include='*/' --exclude='*' --prune-empty-dirs \
--filter "protect .svn/" /origin /destination
Другой подход
если вы не против синхронизировать пустые каталоги, просто:
rsync -vaiz --delete --exclude=.svn/ --include='*.php' --include='*.js' \
--include='*/' --exclude='*' /origin /destination
Ключ должен был --exclude=.svn/
перед --include
"s