Skip to content

Instantly share code, notes, and snippets.

@fortunto2
Last active October 20, 2025 22:41
Show Gist options
  • Select an option

  • Save fortunto2/bacc9d370981c2bfe221e7313b2f06ba to your computer and use it in GitHub Desktop.

Select an option

Save fortunto2/bacc9d370981c2bfe221e7313b2f06ba to your computer and use it in GitHub Desktop.
EXCLUDE_LIST=(
    "*/.venv/*"
    "*/.venv"
    "*/.next/*"
    "*/.next"
    "*/node_modules/*"
    "*/node_modules"
    "*/.yarn/*"
    "*/.yarn"
    "*/.docker/*"
    "*/.docker"
    "*/__pycache__/*"
    "*/__pycache__"
    "*/.cache/*"
    "*/.cache"
"*/.ruff_cache/*"
"*/.ruff_cache"
"*/.hypothesis/*"
"*/.hypothesis"
)
# 2. Настраиваем приглашение для меню
PS3="Введите номер папки для бэкапа (или 'q' для выхода): "
# 3. Запускаем меню выбора (только папки `*/` + "Отмена")
select FOLDER_NAME in */ "Отмена"; do
# 4. Обрабатываем выбор "Отмена"
if [[ "$FOLDER_NAME" == "Отмена" ]]; then
echo "Действие отменено."
break
fi
# 5. Убираем косую черту (/) в конце имени папки
FOLDER_NAME=${FOLDER_NAME%/}
# 6. Проверяем, что выбор был сделан
if [ -n "$FOLDER_NAME" ]; then
echo "Выбрана папка: $FOLDER_NAME"
echo "Исключаю: .git, .venv, node_modules..."
# --- Начинаем процесс ---
echo "--- 1. Архивирую $FOLDER_NAME ..."
# 7. ВЫПОЛНЯЕМ ZIP С ИСКЛЮЧЕНИЯМИ
zip -r -1 "${FOLDER_NAME}.zip" "$FOLDER_NAME" -x "${EXCLUDE_LIST[@]}"
# Проверяем, что zip отработал успешно
if [ $? -ne 0 ]; then
echo "Ошибка: не удалось создать zip-архив."
continue # Возвращаемся к меню
fi
echo "--- 2. Загружаю ${FOLDER_NAME}.zip на r2:backupazure ..."
# 8. Выполняем rclone (используя назначение из вашего примера)
rclone copy "${FOLDER_NAME}".zip "r2:backupazure/new" -vv --s3-no-check-bucket
# Проверяем, что rclone отработал успешно
if [ $? -eq 0 ]; then
echo "--- 3. Удаляю локальный файл ${FOLDER_NAME}.zip ..."
# rm "${FOLDER_NAME}.zip"
echo "--- Бэкап $FOLDER_NAME успешно завершен! ---"
else
echo "Ошибка при загрузке rclone. Локальный файл ${FOLDER_NAME}.zip не удален."
fi
break # Выходим из цикла после завершения
else
echo "Неверный выбор. Попробуйте еще раз."
fi
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment