#!/bin/bash #Создан: Вт 06 авг 2013 22:07:30 #Изменён: Ср 07 авг 2013 00:22:45 #---------------------------------------------------------------------- # # Copyright (C) 2013, Maxim Lihachev, # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . #---------------------------------------------------------------------- # # Скрипт скачивает и распаковывает установочный файл и # все доступные карты ДубльГис # #Стартовая страница GISPAGE="http://msk.2gis.ru/" #Директория для сохранения файлов *.msi DOWNLOADDIR="./updates/" #Директория для сохранения дистрибутива 2ГИС DATADIR="./updates/gis/" #Файл для сохранения адресов оболочки и доступных карт WGETLIST="./wgetlist.txt" #Загрузка оболочки 2ГИС и файлов карт download2GIS() { #Удаление файлов старше 14 дней в директории с обновлениями find $DOWNLOADDIR -type f -mtime +14 -exec rm -f {} \; #Создание директории для файлов карт \mkdir -v -p "$DOWNLOADDIR" #Оболочка 2ГИС \curl -s "${GISPAGE}how-get/download/" \ | \grep -E -o 'href="http://download\.2gis\.ru/arhives/2GISShell.*\.msi"' \ | cut -d '"' -f 2 > $WGETLIST #Карты всех доступных городов for url in `\curl -s $GISPAGE | \grep -E -o 'http://\w+\.2gis\.ru/" class' | \cut -d '"' -f 1`; do \curl -s "${url}how-get/download/" \ | \grep -E -o 'href="http://download\.2gis\.ru/arhives/2GISData_.*\.msi"' \ | cut -d '"' -f 2 >> $WGETLIST done \wget -t 10 -N -c -P $DOWNLOADDIR -i $WGETLIST #Удаление временного файла \rm -f $WGETLIST } #Сборка дистрибутива 2ГИС build2GIS() { #Удаление директории 2ГИС \rm -rf -v $DATADIR #Создание дерева директорий 2ГИС \mkdir -v -p "${DATADIR}/Plugins/DGisLan" #Распаковка файлов *.msi for file in $DOWNLOADDIR/*.msi; do \7z -y x "$file" -o$DATADIR done #Переименовывание файлов и организация структуры директорий 2ГИС # gis/ # ├── Data_[map 1].dgdat # ├── Data_[map 2].dgdat # ├── Data_[map 2].dgdat # ├── grym.exe # └── Plugins/ # ├── DGisLan.chm # ├── DGisLan.dgxpi # ├── DGisLan.dll # ├── DGisLayer.chm # ├── DGisLayer.dgxpi # ├── DGisLayer.dll # ├── DGisNotes.chm # ├── DGisNotes.dgxpi # ├── DGisNotes.dll # └── DGisLan/ # ├── [map 1].dglf # └── [map 2].dglf # for file in $DATADIR/*; do if test -f "$file"; then case "$file" in *_DGDAT) \mv -v "$file" "$DATADIR/Data_`echo -n $(basename $file) | sed 's/_DGDAT/.dgdat/'`";; *_DGLAN) \mv -v "$file" "$DATADIR/Plugins/DGisLan/`echo -n $(basename $file) | sed 's/_DGLAN/.dglf/'`";; *Sgn) \mv -v "$file" "$DATADIR/Plugins/`echo -n $(basename $file) | sed 's/Sgn/.dgxpi/'`";; *Dll) \mv -v "$file" "$DATADIR/Plugins/`echo -n $(basename $file) | sed 's/Dll/.dll/'`";; *Chm) \mv -v "$file" "$DATADIR/Plugins/`echo -n $(basename $file) | sed 's/Chm/.chm/'`";; *EXE) \mv -v "$file" "$DATADIR/`echo -n $(basename $file) | sed 's/EXE/.exe/'`";; esac fi done #Удаление лишних файлов \rm -f -v $DATADIR/MarkInstall \rm -f -v $DATADIR/TrayNotify.exe \rm -f -v $DATADIR/UpdateService.exe } #Разбор аргументов командной строки case "$1" in -h) printf "Использование: $0 [options] -h - вывод справки по использованию. -d - только загрузка файлов обновлений. -x - только распаковка обновлений.\n";; -d) download2GIS;; -x) build2GIS;; *) download2GIS; build2GIS;; esac