DevOps/launcher.sh
2026-03-23 17:58:14 +08:00

193 lines
8.3 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# ==============================================================================
# LAUNCHER.SH - Обработка файлов для Node.js (Linux)
# Использует: Node.js + strip-comments для безопасной очистки
# Поддерживает: .js, .css, .ejs
# ==============================================================================
# --- Пути ---
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
DEV_DIR="$SCRIPT_DIR/!DEV"
INPUT_DIR="$DEV_DIR/input"
OUTPUT_DIR="$DEV_DIR/output"
COMBINED_FILE="$OUTPUT_DIR/Combined_All_Files.txt"
CLEANER_SCRIPT="$SCRIPT_DIR/cleaner.js"
# --- Настройки ---
REMOVE_COMMENTS=true
SUPPORTED_EXTS=("js" "css" "ejs")
# --- Цвета ---
C_CYAN='\033[0;36m'; C_YELLOW='\033[0;33m'; C_GREEN='\033[0;32m'
C_RED='\033[0;31m'; C_WHITE='\033[0;37m'; C_GRAY='\033[0;90m'
C_MAGENTA='\033[0;35m'; C_RESET='\033[0m'
# --- Проверка зависимостей ---
check_deps() {
if ! command -v node &>/dev/null; then
echo -e "${C_RED}[ERR] Node.js не установлен!${C_RESET}"; return 1
fi
if [[ ! -f "$CLEANER_SCRIPT" ]]; then
echo -e "${C_RED}[ERR] Не найден: cleaner.js${C_RESET}"; return 1
fi
return 0
}
# --- Создание папок ---
setup_folders() {
if [[ ! -d "$DEV_DIR" ]]; then
mkdir -p "$INPUT_DIR" "$OUTPUT_DIR"
echo -e "${C_GREEN}[OK] Папка !DEV создана${C_RESET}"
else
[[ ! -d "$INPUT_DIR" ]] && mkdir -p "$INPUT_DIR"
[[ ! -d "$OUTPUT_DIR" ]] && mkdir -p "$OUTPUT_DIR"
fi
}
# --- Очистка комментариев ---
clean_all_comments() {
echo -e "${C_CYAN}=== ОЧИСТКА КОММЕНТАРИЕВ (.js/.css/.ejs) ===${C_RESET}"
echo -e "${C_GRAY}Режим: $([ "$REMOVE_COMMENTS" = true ] && echo "ВКЛ" || echo "ВЫКЛ")${C_RESET}"
[[ "$REMOVE_COMMENTS" = false ]] && { echo -e "${C_YELLOW}Очистка отключена${C_RESET}\n"; return 0; }
check_deps || return 1
[[ ! -d "$INPUT_DIR" ]] && { echo -e "${C_RED}[ERR] Папка не найдена${C_RESET}"; return 1; }
node "$CLEANER_SCRIPT" dir "$INPUT_DIR"
echo -e "${C_GREEN}✅ Очистка завершена${C_RESET}\n"
}
# --- Конвертация в .txt ---
convert_to_txt() {
echo -e "${C_CYAN}=== КОНВЕРТАЦИЯ В .TXT ===${C_RESET}\n"
[[ ! -d "$INPUT_DIR" ]] && { echo -e "${C_RED}[ERR] Папка не найдена${C_RESET}"; return 1; }
local count=0
while IFS= read -r -d '' file; do
ext="${file##*.}"
if [[ " ${SUPPORTED_EXTS[*]} " =~ " $ext " ]] && [[ "$ext" != "txt" ]]; then
newname="${file%.*}.txt"
mv "$file" "$newname" && { echo -e "${C_GREEN}[OK] $(basename "$file")${C_RESET}"; ((count++)); }
fi
done < <(find "$INPUT_DIR" -type f -print0 2>/dev/null)
echo -e "${C_WHITE}Конвертировано: $count${C_RESET}\n"
}
# --- Объединение файлов ---
combine_files() {
echo -e "${C_CYAN}=== ОБЪЕДИНЕНИЕ ФАЙЛОВ ===${C_RESET}\n"
[[ ! -d "$INPUT_DIR" ]] && { echo -e "${C_RED}[ERR] Папка не найдена${C_RESET}"; return 1; }
mapfile -t txt_files < <(find "$INPUT_DIR" -type f -name "*.txt" 2>/dev/null | sort)
local file_count=${#txt_files[@]}
[[ $file_count -eq 0 ]] && { echo -e "${C_RED}[ERR] Нет .txt файлов${C_RESET}"; return 1; }
echo -e "${C_WHITE}Найдено: $file_count${C_RESET}\n"
mkdir -p "$OUTPUT_DIR"
{
echo "ОБЪЕДИНЁННЫЙ ФАЙЛ (Node.js)"
echo "Создан: $(date '+%Y-%m-%d %H:%M:%S')"
echo "Источник: $INPUT_DIR"
echo "Файлов: $file_count"
echo "Комментарии: $([ "$REMOVE_COMMENTS" = true ] && echo "УДАЛЕНЫ" || echo "ОСТАВЛЕНЫ")"
echo ""
} > "$COMBINED_FILE"
for file in "${txt_files[@]}"; do
echo "================================================================================" >> "$COMBINED_FILE"
echo "ФАЙЛ: $file" >> "$COMBINED_FILE"
echo "================================================================================" >> "$COMBINED_FILE"
grep -v '^[[:space:]]*$' "$file" >> "$COMBINED_FILE" 2>/dev/null
echo -e "\n" >> "$COMBINED_FILE"
echo -e "${C_GREEN}[OK] $(basename "$file")${C_RESET}"
done
if [[ -f "$COMBINED_FILE" ]]; then
local size=$(du -h "$COMBINED_FILE" | cut -f1)
echo -e "\n${C_GREEN}[OK] Создан: $COMBINED_FILE ($size)${C_RESET}"
fi
echo ""
}
# --- Меню и утилиты ---
toggle_comments() {
echo -e "${C_CYAN}=== НАСТРОЙКА ===${C_RESET}\n"
REMOVE_COMMENTS=$([ "$REMOVE_COMMENTS" = true ] && echo false || echo true)
echo -e "${C_YELLOW}Очистка: $([ "$REMOVE_COMMENTS" = true ] && echo "ВКЛ" || echo "ВЫКЛ")${C_RESET}\n"
}
clean_all() {
echo -e "${C_RED}=== СБРОС ПРОЕКТА ===${C_RESET}\n"
[[ -d "$DEV_DIR" ]] && { rm -rf "$DEV_DIR"; echo -e "${C_GREEN}[OK] !DEV удалена${C_RESET}"; }
setup_folders; echo -e "${C_GREEN}[OK] Структура восстановлена${C_RESET}\n"
}
open_folder() {
if [[ -d "$DEV_DIR" ]]; then
(xdg-open "$DEV_DIR" 2>/dev/null || open "$DEV_DIR" 2>/dev/null || echo "Откройте: $DEV_DIR") &
echo -e "${C_GREEN}[OK] Открыта !DEV${C_RESET}"
else
echo -e "${C_RED}[ERR] !DEV не найдена${C_RESET}"
fi
echo ""
}
show_structure() {
echo -e "${C_CYAN}=== СТРУКТУРА ===${C_RESET}\n"
echo -e "${C_WHITE}Корень: $SCRIPT_DIR${C_RESET}"
if [[ -d "$DEV_DIR" ]]; then
echo -e "${C_YELLOW}!DEV/${C_RESET}"
echo -e " ${C_GREEN}input/ ($(find "$INPUT_DIR" -type f 2>/dev/null | wc -l) файлов)${C_RESET}"
echo -e " ${C_GREEN}output/ ($(find "$OUTPUT_DIR" -type f 2>/dev/null | wc -l) файлов)${C_RESET}"
fi
echo -e "${C_CYAN}Поддержка: ${SUPPORTED_EXTS[*]}${C_RESET}"
echo -e "${C_WHITE}Очистка: $([ "$REMOVE_COMMENTS" = true ] && echo -e "${C_GREEN}ВКЛ" || echo -e "${C_RED}ВЫКЛ")${C_RESET}\n"
}
show_header() {
clear
echo -e "${C_CYAN}==================================================${C_RESET}"
echo -e "${C_CYAN} ОБРАБОТКА ФАЙЛОВ (Node.js + Bash)${C_RESET}"
echo -e "${C_CYAN}==================================================${C_RESET}"
echo -e "${C_GRAY}Скрипт: $SCRIPT_DIR/launcher.sh${C_RESET}\n"
}
show_menu() {
echo -e "${C_YELLOW}Действия:${C_RESET}"
echo -e "1. ${C_MAGENTA}[ОЧИСТКА] Удалить комментарии (.js/.css/.ejs)${C_RESET}"
echo -e "2. ${C_CYAN}[КОНВЕРТ] Конвертировать в .txt${C_RESET}"
echo -e "3. ${C_CYAN}[ОБЪЕДИН] Объединить .txt в один файл${C_RESET}"
echo -e "4. ${C_GREEN}[ВСЁ] Очистка → Конвертация → Объединение${C_RESET}"
echo -e "5. ${C_WHITE}[НАСТР] Переключить очистку$([ "$REMOVE_COMMENTS" = true ] && echo " [ВКЛ]" || echo " [ВЫКЛ]")${C_RESET}"
echo -e "6. ${C_MAGENTA}[ПАПКА] Открыть !DEV${C_RESET}"
echo -e "7. ${C_WHITE}[ИНФО] Показать структуру${C_RESET}"
echo -e "8. ${C_RED}[СБРОС] Полная очистка${C_RESET}"
echo -e "0. ${C_RED}[ВЫХОД] Завершить${C_RESET}\n"
}
wait_for_user() { echo ""; read -p "Нажмите Enter для возврата..." < /dev/tty; }
# ==============================================================================
# === ЗАПУСК ===
# ==============================================================================
setup_folders
while true; do
show_header; show_menu
read -p "Выберите (0-8): " choice
echo ""
case $choice in
1) clean_all_comments; wait_for_user ;;
2) convert_to_txt; wait_for_user ;;
3) combine_files; wait_for_user ;;
4) clean_all_comments; convert_to_txt; combine_files; wait_for_user ;;
5) toggle_comments; wait_for_user ;;
6) open_folder; wait_for_user ;;
7) show_structure; wait_for_user ;;
8) clean_all; wait_for_user ;;
0) echo -e "${C_YELLOW}Выход...${C_RESET}"; exit 0 ;;
*) echo -e "${C_RED}Неверный выбор!${C_RESET}"; sleep 2 ;;
esac
done