folders list

master
serr 2025-04-12 16:25:06 +03:00
parent 4599759d6a
commit 1a6886620d
2 changed files with 44 additions and 20 deletions

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
main.go
folder2
folder1
empty

58
eye.sh
View File

@ -1,18 +1,18 @@
#!/bin/bash #!/bin/bash
# НАСТРОЙКА СКРИПТА ТУТ ########################################################### # НАСТРОЙКА СКРИПТА ТУТ ###########################################################
DURATION=5 # Задержка между проверками в секундах DURATION=1 # Задержка между проверками в секундах
WATCH_DIR=posts/ # Директория для наблюдения WATCH_DIRS=("folder1" "folder2" "empty") # Массив директорий для наблюдения
BINARY_PATH="./hikan.ru" # Путь до бинарного файла BINARY_PATH="./main" # Путь до бинарного файла
BUILD_CMD="go build -o $BINARY_PATH main.go" # Команда для сборки BUILD_CMD="go build -o $BINARY_PATH main.go" # Команда для сборки
################################################################################### ###################################################################################
# Нужное для работы скрипта (не менять) # Нужное для работы скрипта (не менять)
stty -echoctl # Отключает вывод управляющих символов (включая ^C). stty -echoctl # Отключает вывод управляющих символов (включая ^C).
LAST_MOD=0 # Для хранения времени последней модификации declare -A LAST_MODS # Ассоциативный массив для хранения времени последней модификации
LAST_COUNT=0 # Для хранения количества файлов declare -A LAST_COUNTS # Ассоциативный массив для хранения количества файлов
CLEANUP_DONE=0 # Была ли уже вызвана cleanup CLEANUP_DONE=0 # Была ли уже вызвана cleanup
PID="" # Для хранения PID запущенного процесса PID="" # Для хранения PID запущенного процесса
# #
# Для вывода в синем цвете # Для вывода в синем цвете
@ -43,22 +43,41 @@ kill_previous() {
} }
# #
# Функция для подсчета файлов в директории # Функция для проверки изменений
count_files() { check_changes() {
find "$WATCH_DIR" -type f | wc -l 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 while true; do
CURRENT_MOD=$(find "$WATCH_DIR" -type f -exec stat -c %Y {} \; | sort -nr | head -1) # Время последнего изменения в папке WATCH_DIR check_changes
CURRENT_COUNT=$(count_files) if [ $? -eq 1 ]; then
if { [ -n "$CURRENT_MOD" ] && [ "$CURRENT_MOD" -gt "$LAST_MOD" ]; } || [ "$CURRENT_COUNT" -ne "$LAST_COUNT" ]; then blue "EYE | rebuilding..."
LAST_MOD=$CURRENT_MOD
LAST_COUNT=$CURRENT_COUNT
blue "EYE | changes detected. rebuilding..."
$BUILD_CMD 2>/dev/null # Сборка $BUILD_CMD 2>/dev/null # Сборка
if [ $? -eq 0 ]; then # $? - код возврата if [ $? -eq 0 ]; then # $? - код возврата
blue "EYE | build successful. restarting..." blue "EYE | build successful. restarting..."
@ -73,3 +92,4 @@ while true; do
sleep $DURATION sleep $DURATION
done done
#