diff --git a/backup.sh b/backup.sh new file mode 100755 index 0000000..a48d0dd --- /dev/null +++ b/backup.sh @@ -0,0 +1,67 @@ +#!/bin/bash + +# Проверка аргументов +if [ "$#" -ne 3 ]; then + echo "Использование: $0 " + 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 "Резервное копирование завершено."