From 1a6886620da13e50e8e15d76ac7fabfa801d7280 Mon Sep 17 00:00:00 2001 From: serr Date: Sat, 12 Apr 2025 16:25:06 +0300 Subject: [PATCH] folders list --- .gitignore | 4 ++++ eye.sh | 60 ++++++++++++++++++++++++++++++++++++------------------ 2 files changed, 44 insertions(+), 20 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c6509ef --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +main.go +folder2 +folder1 +empty \ No newline at end of file diff --git a/eye.sh b/eye.sh index f875198..784abbd 100755 --- a/eye.sh +++ b/eye.sh @@ -1,18 +1,18 @@ #!/bin/bash # НАСТРОЙКА СКРИПТА ТУТ ########################################################### -DURATION=5 # Задержка между проверками в секундах -WATCH_DIR=posts/ # Директория для наблюдения -BINARY_PATH="./hikan.ru" # Путь до бинарного файла +DURATION=1 # Задержка между проверками в секундах +WATCH_DIRS=("folder1" "folder2" "empty") # Массив директорий для наблюдения +BINARY_PATH="./main" # Путь до бинарного файла BUILD_CMD="go build -o $BINARY_PATH main.go" # Команда для сборки ################################################################################### # Нужное для работы скрипта (не менять) -stty -echoctl # Отключает вывод управляющих символов (включая ^C). -LAST_MOD=0 # Для хранения времени последней модификации -LAST_COUNT=0 # Для хранения количества файлов -CLEANUP_DONE=0 # Была ли уже вызвана cleanup -PID="" # Для хранения PID запущенного процесса +stty -echoctl # Отключает вывод управляющих символов (включая ^C). +declare -A LAST_MODS # Ассоциативный массив для хранения времени последней модификации +declare -A LAST_COUNTS # Ассоциативный массив для хранения количества файлов +CLEANUP_DONE=0 # Была ли уже вызвана cleanup +PID="" # Для хранения PID запущенного процесса # # Для вывода в синем цвете @@ -43,22 +43,41 @@ kill_previous() { } # -# Функция для подсчета файлов в директории -count_files() { - find "$WATCH_DIR" -type f | wc -l +# Функция для проверки изменений +check_changes() { + local changed=0 + + for dir in "${WATCH_DIRS[@]}"; do + # Получаем текущее время модификации и количество файлов + local current_mod=$(find "$dir" -type f -exec stat -c %Y {} \; | sort -nr | head -1) + local current_count=$(find "$dir" -type f 2>/dev/null | wc -l) + + # Проверяем изменения + if { [ -n "$current_mod" ] && [ "$current_mod" -gt "${LAST_MODS[$dir]}" ]; } || [ "$current_count" -ne "${LAST_COUNTS[$dir]}" ]; then + changed=1 + LAST_MODS["$dir"]=$current_mod + LAST_COUNTS["$dir"]=$current_count + [ -n "$PID" ] && blue "EYE | changes detected in \033[35m$dir\033[0m" + fi + done + + return $changed } # -LAST_COUNT=$(count_files) -[ $LAST_COUNT = 0 ] && blue "EYE | empty dir" +# Инициализация массивов +for dir in "${WATCH_DIRS[@]}"; do # @ - обозначает "все элементы массива" + LAST_MODS["$dir"]=0 + LAST_COUNTS["$dir"]=$(find "$dir" -type f 2>/dev/null | wc -l) + blue "EYE | started watching the directory \033[35m$dir\033[0m" +done +# +# Основной цикл работы скрипта while true; do - CURRENT_MOD=$(find "$WATCH_DIR" -type f -exec stat -c %Y {} \; | sort -nr | head -1) # Время последнего изменения в папке WATCH_DIR - CURRENT_COUNT=$(count_files) - if { [ -n "$CURRENT_MOD" ] && [ "$CURRENT_MOD" -gt "$LAST_MOD" ]; } || [ "$CURRENT_COUNT" -ne "$LAST_COUNT" ]; then - LAST_MOD=$CURRENT_MOD - LAST_COUNT=$CURRENT_COUNT - blue "EYE | changes detected. rebuilding..." + check_changes + if [ $? -eq 1 ]; then + blue "EYE | rebuilding..." $BUILD_CMD 2>/dev/null # Сборка if [ $? -eq 0 ]; then # $? - код возврата blue "EYE | build successful. restarting..." @@ -72,4 +91,5 @@ while true; do fi sleep $DURATION -done \ No newline at end of file +done +# \ No newline at end of file