|
|
@@ -0,0 +1,67 @@
|
|
|
+#!/bin/bash
|
|
|
+
|
|
|
+# Проверка аргументов
|
|
|
+if [ "$#" -ne 3 ]; then
|
|
|
+ echo "Использование: $0 <NAS_IP_OR_HOSTNAME> <NAS_USER> <NAS_PASSWORD>"
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+NAS_ADDR="$1"
|
|
|
+REMOTE_USER="$2"
|
|
|
+NAS_PASS="$3"
|
|
|
+BACKUP_LIST_FILE="backup_folders.txt" # Файл со списком папок для бэкапа
|
|
|
+EXCLUDE_LIST_FILE="exclude_list.txt" # Файл с исключениями
|
|
|
+REMOTE_BASE_DIR="NetBackup/$(hostname)" # Базовая папка на NAS (с именем текущего ПК)
|
|
|
+
|
|
|
+# Проверка наличия файла со списком папок
|
|
|
+if [ ! -f "$BACKUP_LIST_FILE" ]; then
|
|
|
+ echo "Файл '$BACKUP_LIST_FILE' не найден!"
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+# Проверка файла исключений (если есть)
|
|
|
+RSYNC_EXCLUDE=""
|
|
|
+if [ -f "$EXCLUDE_LIST_FILE" ]; then
|
|
|
+ RSYNC_EXCLUDE="--exclude-from=$EXCLUDE_LIST_FILE"
|
|
|
+ echo "Используются исключения из '$EXCLUDE_LIST_FILE'"
|
|
|
+else
|
|
|
+ echo "Файл исключений '$EXCLUDE_LIST_FILE' не найден, копируем всё."
|
|
|
+fi
|
|
|
+
|
|
|
+# Чтение списка папок для бэкапа
|
|
|
+while IFS= read -r folder; do
|
|
|
+ # Пропускаем пустые строки и комментарии (начинающиеся с #)
|
|
|
+ if [[ -z "$folder" || "$folder" == \#* ]]; then
|
|
|
+ continue
|
|
|
+ fi
|
|
|
+
|
|
|
+ folder="${folder/#\~/$HOME}"
|
|
|
+
|
|
|
+ # Проверка наличия файла
|
|
|
+ if [ ! -f "$BACKUP_LIST_FILE" ]; then
|
|
|
+ echo "Файл '$BACKUP_LIST_FILE' не найден!" >&2
|
|
|
+ exit 1
|
|
|
+ fi
|
|
|
+
|
|
|
+ echo "Синхронизация '$folder' на NAS..."
|
|
|
+
|
|
|
+ # Формируем путь на удалённом сервере
|
|
|
+ remote_path="$REMOTE_USER@$NAS_ADDR::$REMOTE_BASE_DIR"
|
|
|
+
|
|
|
+ # Выполняем rsync с SSH-паролем (используем sshpass для автоматизации)
|
|
|
+ if ! command -v sshpass &> /dev/null; then
|
|
|
+ echo "Установите 'sshpass' для автоматической передачи пароля (sudo apt install sshpass)"
|
|
|
+ exit 1
|
|
|
+ fi
|
|
|
+
|
|
|
+ sshpass -p "$NAS_PASS" rsync -avz --relative $RSYNC_EXCLUDE "$folder" "$remote_path"
|
|
|
+
|
|
|
+ if [ $? -eq 0 ]; then
|
|
|
+ echo "Успешно: $folder"
|
|
|
+ else
|
|
|
+ echo "Ошибка при синхронизации: $folder"
|
|
|
+ fi
|
|
|
+
|
|
|
+done < "$BACKUP_LIST_FILE"
|
|
|
+
|
|
|
+echo "Резервное копирование завершено."
|