From 4c32faa92f37784dc93fda41b9d8d3cc2ece2ee6 Mon Sep 17 00:00:00 2001 From: "Denis V. Dedkov" Date: Thu, 10 Apr 2025 10:33:36 +0200 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D1=81=D0=BA=D1=80=D0=B8=D0=BF=D1=82=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D1=80=D0=B5=D0=B7=D0=B5=D1=80=D0=B2=D0=BD=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20=D0=BA=D0=BE=D0=BF=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backup.sh | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100755 backup.sh 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 "Резервное копирование завершено."