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