Назад | Перейти на главную страницу

Отдельные каталоги и файлы Rsync с одинаковой структурой

Я хочу использовать rsync для определенных каталогов и файлов с одинаковой структурой

например :-

source/
source/110/var/lib/mysql
source/110/var/lib/mysql
source/110/var/lib/mysql
source/110/home
source/110/bin/
source/110/etc/
source/120/var/lib/mysql
source/120/var/lib/mysql
source/120/var/lib/mysql
source/120/home
source/120/bin/
source/120/etc/

как rysnc mysql и домашние каталоги и файлы, включенные в директорию, в одну и ту же целевую папку и с той же структурой, как в следующем примере: -

destination/
destination/110/var/lib/mysql
destination/110/home
destination/120/var/lib/mysql
destination/120/home

Спасибо

Вы можете сделать это с помощью необычных фильтров. На странице руководства есть хороший пример этого, но с недавним rsync (> = 2.6.7) вы можете сделать что-то вроде:

rsync -a source/ destination/ \
    -f '+ /*/' \
    -f '+ /*/home/***' \
    -f '+ /*/var/' \
    -f '+ /*/var/lib/' \
    -f '+ /*/var/lib/mysql/***' \
    -f '- *'

Другими словами, вы указываете, какие каталоги хотите включают в вашей синхронизации, а затем исключить все остальное. В *** подстановочный знак очень полезен, но если ваш rsync старше, вам придется заменить + /*/home/*** фильтр со следующими двумя:

    -f '+ /*/home/' \
    -f '+ /*/home/**' \

Вот альтернатива использованию фильтров:

cd source && \
rsync -aR  110/var/lib/mysql  110/home  120/var/lib/mysql  120/home  destination

То есть вы передаете все исходные каталоги в качестве аргументов в rsync, за которым следует целевой каталог, все в одной команде. Вы должны обязательно использовать -R в этом случае, чтобы пути к исходному каталогу сохранялись в месте назначения.