/
gitVerseVVG
/
OfflineInstaller
Обзор
Документация
Войти
/
gitVerseVVG
/
OfflineInstaller
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
resources_create/resources_create.sh
163 строки
7 KB
gitVerseVVG
create: OfflineInstaller.lpi, OfflineInstaller.lpr, OfflineInstaller.lps, resources_create.sh, Factorial5, app_install.sh, rabbitmq_install.sh, postgresql_install.sh, redis_install.sh, read.me
05 май 2026, 10:14
Верифицирован
05 май 2026, 10:14
d2040ca
Код
Авторство
О чём код?
#!/bin/bash # Скрипт для создания архивов всех подкаталогов в каталоге files # Архивы создаются в каталоге resources (на одном уровне со скриптом) # Также создаётся конфигурационный файл OfflineInstaller.cnfg и ресурсный файл installer_resources.rc # После компиляции временные файлы удаляются # Использование: ./resources_create.sh # Определяем исходный каталог с файлами FILES_DIR="./files" # Определяем целевой каталог для архивов RESOURCES_DIR="./resources" # Определяем имя конфигурационного файла CONFIG_FILE="$RESOURCES_DIR/OfflineInstaller.cnfg" # Определяем имя ресурсного файла (в родительском каталоге) RC_FILE="./installer_resources.rc" # Определяем имя выходного RES файла RES_FILE="./installer_resources.res" # Проверяем существование исходного каталога files if [ ! -d "$FILES_DIR" ]; then echo "Ошибка: Исходный каталог '$FILES_DIR' не найден!" echo "Убедитесь, что скрипт запускается из директории, содержащей каталог 'files'." exit 1 fi # Проверяем наличие windres (может быть в mingw или cygwin) if ! command -v x86_64-w64-mingw32-windres &> /dev/null; then echo "Ошибка: Команда 'x86_64-w64-mingw32-windres' не найдена!" echo "Установите mingw-w64 или cygwin с пакетом binutils." echo "На Debian/Ubuntu: sudo apt install mingw-w64-tools" exit 1 fi # Создаём целевой каталог resources, если он не существует if [ ! -d "$RESOURCES_DIR" ]; then echo "Создаю каталог для архивов: $RESOURCES_DIR" mkdir -p "$RESOURCES_DIR" fi # Создаём или очищаем конфигурационный файл > "$CONFIG_FILE" # Создаём или очищаем ресурсный файл > "$RC_FILE" echo "Исходный каталог: $(pwd)/$FILES_DIR" echo "Каталог для архивов: $(pwd)/$RESOURCES_DIR" echo "Конфигурационный файл: $CONFIG_FILE" echo "Ресурсный файл: $RC_FILE" echo "Выходной RES файл: $RES_FILE" echo "Начинаю создание архивов..." # Счетчики для статистики created=0 errors=0 # Массив для хранения имён каталогов в нижнем регистре declare -a dir_names_lower # Перебираем все подкаталоги в files for item in "$FILES_DIR"/*/; do # Проверяем, существует ли элемент (на случай, если нет подкаталогов) [ -e "$item" ] || continue # Убираем слеш в конце и получаем имя каталога без пути dir_path="${item%/}" dir_name=$(basename "$dir_path") echo "Обрабатываю: $dir_name" # Создаем архив в каталоге resources if tar -czf "$RESOURCES_DIR/${dir_name}.tar.gz" -C "$FILES_DIR" "$dir_name" 2>/dev/null; then echo " ✓ Архив создан: $RESOURCES_DIR/${dir_name}.tar.gz" ((created++)) # Сохраняем имя каталога в нижнем регистре для последующего использования dir_names_lower+=("$dir_name") # Добавляем запись в конфигурационный файл (наименование в верхнем регистре + _PACKAGE) echo "${dir_name^^}_PACKAGE" >> "$CONFIG_FILE" else echo " ✗ Ошибка при создании архива для: $dir_name" ((errors++)) fi done # Проверяем, были ли созданы архивы if [ $created -eq 0 ]; then echo "" echo "Внимание: Не создано ни одного архива." echo "Конфигурационный и ресурсный файлы не будут созданы." # Удаляем пустые файлы, если они были созданы [ -f "$CONFIG_FILE" ] && rm "$CONFIG_FILE" [ -f "$RC_FILE" ] && rm "$RC_FILE" exit 0 fi # Копируем конфигурационный файл в ресурсный файл cp "$CONFIG_FILE" "$RC_FILE" # Модифицируем ресурсный файл: добавляем к каждой строке постфикс # Создаём временный файл для обработки TEMP_RC_FILE=$(mktemp) while IFS= read -r line; do # Извлекаем подстроку с начала до символа '_' (в нижнем регистре) prefix="${line%_*}" # Удаляем всё после последнего '_' prefix_lower=$(echo "$prefix" | tr '[:upper:]' '[:lower:]') # Добавляем постфикс и записываем во временный файл echo "$line RCDATA \"resources/${prefix_lower}.tar.gz\"" >> "$TEMP_RC_FILE" done < "$RC_FILE" # Заменяем оригинальный файл обработанным mv "$TEMP_RC_FILE" "$RC_FILE" # Добавляем строку с CNFG_PACKAGE echo 'CNFG_PACKAGE RCDATA "resources/OfflineInstaller.cnfg"' >> "$RC_FILE" echo "" echo "Архивы и конфигурационные файлы созданы." echo "Запускаю компиляцию ресурсов..." # Компилируем ресурсный файл в COFF объектный файл if x86_64-w64-mingw32-windres "$RC_FILE" -O coff -o "$RES_FILE"; then echo "✓ Успешно создан: $RES_FILE" echo "" echo "Выполняю очистку временных файлов..." # Удаляем каталог resources со всем содержимым if [ -d "$RESOURCES_DIR" ]; then rm -rf "$RESOURCES_DIR" echo "✓ Удалён каталог: $RESOURCES_DIR" fi # Удаляем файл installer_resources.rc if [ -f "$RC_FILE" ]; then rm -f "$RC_FILE" echo "✓ Удалён файл: $RC_FILE" fi echo "" echo "Очистка завершена." else echo "✗ Ошибка при компиляции ресурсного файла!" echo "Ресурсный файл не был создан. Временные файлы не удаляются для отладки." exit 1 fi # Выводим итоговую статистику echo "" echo "=========================================" echo "Готово!" echo "Создано архивов: $created" echo "Ошибок при создании архивов: $errors" echo "Создан ресурсный файл: $RES_FILE" echo "========================================="