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

Другие вопросы по тегам