backup.sh 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #!/bin/bash
  2. # Проверка аргументов
  3. if [ "$#" -ne 3 ]; then
  4. echo "Использование: $0 <NAS_IP_OR_HOSTNAME> <NAS_USER> <NAS_PASSWORD>"
  5. exit 1
  6. fi
  7. NAS_ADDR="$1"
  8. REMOTE_USER="$2"
  9. NAS_PASS="$3"
  10. BACKUP_LIST_FILE="backup_folders.txt" # Файл со списком папок для бэкапа
  11. EXCLUDE_LIST_FILE="exclude_list.txt" # Файл с исключениями
  12. REMOTE_BASE_DIR="NetBackup/$(hostname)" # Базовая папка на NAS (с именем текущего ПК)
  13. # Проверка наличия файла со списком папок
  14. if [ ! -f "$BACKUP_LIST_FILE" ]; then
  15. echo "Файл '$BACKUP_LIST_FILE' не найден!"
  16. exit 1
  17. fi
  18. # Проверка файла исключений (если есть)
  19. RSYNC_EXCLUDE=""
  20. if [ -f "$EXCLUDE_LIST_FILE" ]; then
  21. RSYNC_EXCLUDE="--exclude-from=$EXCLUDE_LIST_FILE"
  22. echo "Используются исключения из '$EXCLUDE_LIST_FILE'"
  23. else
  24. echo "Файл исключений '$EXCLUDE_LIST_FILE' не найден, копируем всё."
  25. fi
  26. # Чтение списка папок для бэкапа
  27. while IFS= read -r folder; do
  28. # Пропускаем пустые строки и комментарии (начинающиеся с #)
  29. if [[ -z "$folder" || "$folder" == \#* ]]; then
  30. continue
  31. fi
  32. folder="${folder/#\~/$HOME}"
  33. # Проверка наличия файла
  34. if [ ! -f "$BACKUP_LIST_FILE" ]; then
  35. echo "Файл '$BACKUP_LIST_FILE' не найден!" >&2
  36. exit 1
  37. fi
  38. echo "Синхронизация '$folder' на NAS..."
  39. # Формируем путь на удалённом сервере
  40. remote_path="$REMOTE_USER@$NAS_ADDR::$REMOTE_BASE_DIR"
  41. # Выполняем rsync с SSH-паролем (используем sshpass для автоматизации)
  42. if ! command -v sshpass &> /dev/null; then
  43. echo "Установите 'sshpass' для автоматической передачи пароля (sudo apt install sshpass)"
  44. exit 1
  45. fi
  46. sshpass -p "$NAS_PASS" rsync -avz --relative $RSYNC_EXCLUDE "$folder" "$remote_path"
  47. if [ $? -eq 0 ]; then
  48. echo "Успешно: $folder"
  49. else
  50. echo "Ошибка при синхронизации: $folder"
  51. fi
  52. done < "$BACKUP_LIST_FILE"
  53. echo "Резервное копирование завершено."