Скрипт для синхронизации большого количества зеркал

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
MozG1986
Сообщения: 103
ОС: Mageia5, Mageia6

Скрипт для синхронизации большого количества зеркал

Сообщение MozG1986 »

Посмотрел я на скрипты для синхронизации зеркала от Мандривы и понял, что надо писать свое

[root@server repo-updt.d]# cat sync_mirror

Код: Выделить всё

#! /bin/bash
mirrors=$(ls mirror* | \
    LANG=C sed  -e '/mirror-[A-Za-z0-9\._-]\+$/ { s/^mirror-//g;s/[0-9]/ &/}' | \
    LANG=C sort -k 1,1 -k 2n | \
    LANG=C sed 's/ //')
    rc=0
echo $mirrors


#FILES="/etc/sysconfig/network-scripts/route-$1"

for i in $mirrors; do
for file in mirror-$i; do
   if [ -f "$file" ]; then
       { cat "$file"; echo; } | while read line; do
               #echo $line
               if [ -z "$line" ]; then continue; fi
               if [ `echo $line | grep 'baseURL'` ]; then
               baseURL=`echo $line | sed "s/baseURL=//"`
               continue;
               fi
               if [ `echo $line | grep 'basePATH'` ]; then
               basePATH=`echo $line | sed "s/basePATH=//"`
               continue;
               fi
               if [ `echo $line | grep 'proto'` ]; then
               proto=`echo $line | sed "s/proto=//"`
               continue;
               fi
               suffix=`echo $line | sed "s ^$baseURL  "`
               mkdir -p "$basePATH$suffix"
               rsync -alHr --progress --delete $proto://$line $basePATH$suffix
               done
   fi
done
done


скрипт ищет все файлы в его каталоге, начинаюшиеся на "mirror-", парсит их построчно, находит там описания переменных и список url для синхронизации

[root@server repo-updt.d]# cat mirror-Mandriva_2010.0_i586

Код: Выделить всё

baseURL=ftp.chg.ru/mandriva/official/2010.0/i586/media/
basePATH=/var/ftp/mirror/Mandriva_2010.0_i586/official/
proto=rsync
ftp.chg.ru/mandriva/official/2010.0/i586/media/main/release/
ftp.chg.ru/mandriva/official/2010.0/i586/media/contrib/release/
ftp.chg.ru/mandriva/official/2010.0/i586/media/non-free/release/
ftp.chg.ru/mandriva/official/2010.0/i586/media/main/updates/
ftp.chg.ru/mandriva/official/2010.0/i586/media/contrib/updates/
ftp.chg.ru/mandriva/official/2010.0/i586/media/non-free/updates/
ftp.chg.ru/mandriva/official/2010.0/i586/media/main/backports/
ftp.chg.ru/mandriva/official/2010.0/i586/media/contrib/backports/
ftp.chg.ru/mandriva/official/2010.0/i586/media/non-free/backports/
ftp.chg.ru/mandriva/official/2010.0/i586/media/main/testing/
ftp.chg.ru/mandriva/official/2010.0/i586/media/contrib/testing/
ftp.chg.ru/mandriva/official/2010.0/i586/media/non-free/testing/

baseURL=ftp.free.fr/pub/Distributions_Linux/plf/mandriva/2010.0/
basePATH=/var/ftp/mirror/Mandriva_2010.0_i586/plf/
proto=ftp
ftp.free.fr/pub/Distributions_Linux/plf/mandriva/2010.0/free/release/binary/i586/
ftp.free.fr/pub/Distributions_Linux/plf/mandriva/2010.0/non-free/release/binary/i586/
ftp.free.fr/pub/Distributions_Linux/plf/mandriva/2010.0/free/backports/binary/i586/
ftp.free.fr/pub/Distributions_Linux/plf/mandriva/2010.0/non-free/backports/binary/i586/


это пример файла с описанием источников.
baseURL нужен для того, чтобы отсечь его от URL и добавить к basePATH, то есть сформировать автоматически путь назначения для файлов.
proto - указывает по какому протоколу rsync будет качать данные с сервера.
в конце каждого url обязательно писать слеш /, иначе будут глюки в папке назначения.
Пустые строки скрипт игнорирует, а вот комментарии я не заложил

Спасибо большое Subj за помощь в написании скрипта
Спасибо сказали: