Files
ptp/migration-s3/add-new-photos.sh
T
2025-08-02 11:45:16 +02:00

247 lines
8.9 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Скрипт для быстрого добавления новых фотографий в S3
# Использовать ПОСЛЕ миграции для добавления новых изображений
set -e # Остановка при ошибке
# Загрузка конфигурации
source "$(dirname "$0")/config.sh"
# Проверка параметров
if [ $# -eq 0 ]; then
echo "Использование: $0 <путь_к_изображениям> [описание]"
echo ""
echo "Примеры:"
echo " $0 /path/to/new/photos"
echo " $0 /path/to/new/photos \"Фото из поездки в Сочи\""
echo " $0 ./new-photos"
echo ""
echo "Скрипт загружает изображения в S3 и создает готовый код для вставки в пост."
exit 1
fi
photos_path="$1"
description="${2:-Новые фотографии}"
# Проверка существования директории
if [ ! -d "$photos_path" ]; then
error_log "Директория не найдена: $photos_path"
exit 1
fi
log "Начало загрузки новых фотографий..."
log "Путь к фото: $photos_path"
log "Описание: $description"
# Подсчет изображений
image_files=$(find "$photos_path" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" -o -iname "*.gif" -o -iname "*.webp" \) | sort)
total_images=$(echo "$image_files" | wc -l)
if [ $total_images -eq 0 ]; then
error_log "Изображения не найдены в $photos_path"
exit 1
fi
log "Найдено $total_images изображений для загрузки"
# Создание уникального префикса для этой партии фото
batch_prefix="batch_$(date +%Y%m%d_%H%M%S)"
uploaded_files=()
failed_files=()
# Функция для загрузки одного файла
upload_single_file() {
local file_path="$1"
local filename=$(basename "$file_path")
local extension="${filename##*.}"
# Создание уникального имени файла
local base_name="${filename%.*}"
local s3_filename="${base_name}_${batch_prefix}.${extension}"
local s3_key="images/$s3_filename"
# Определение MIME типа
local mime_type=""
case "$extension" in
jpg|jpeg) mime_type="image/jpeg" ;;
png) mime_type="image/png" ;;
gif) mime_type="image/gif" ;;
webp) mime_type="image/webp" ;;
*) mime_type="application/octet-stream" ;;
esac
# Загрузка файла
if aws s3 cp "$file_path" "s3://$S3_BUCKET/$s3_key" \
--content-type "$mime_type" \
--cache-control "max-age=31536000" \
--metadata-directive REPLACE; then
uploaded_files+=("$s3_filename")
log "✓ Загружено: $filename$s3_filename"
return 0
else
failed_files+=("$filename")
error_log "✗ Ошибка загрузки: $filename"
return 1
fi
}
# Загрузка всех файлов
log "Загрузка изображений в S3..."
uploaded_count=0
failed_count=0
echo "$image_files" | while read -r file; do
if [ -n "$file" ]; then
if upload_single_file "$file"; then
uploaded_count=$((uploaded_count + 1))
else
failed_count=$((failed_count + 1))
fi
fi
done
# Пересчет после загрузки
uploaded_count=${#uploaded_files[@]}
failed_count=${#failed_files[@]}
log "Загрузка завершена: $uploaded_count успешно, $failed_count ошибок"
# Проверка загруженных файлов
log "Проверка доступности загруженных файлов..."
accessible_files=()
for filename in "${uploaded_files[@]}"; do
file_url="$S3_BASE_URL/images/$filename"
if curl -s -I "$file_url" | grep -q "200 OK"; then
accessible_files+=("$filename")
log "✓ Доступен: $file_url"
else
error_log "✗ Недоступен: $file_url"
fi
done
# Создание кода для вставки в пост
if [ ${#accessible_files[@]} -gt 0 ]; then
log "Создание кода для вставки в пост..."
# Файл с готовым кодом
code_file="./migration-s3/ready-code-$(date +%Y%m%d_%H%M%S).md"
{
echo "# Готовый код для вставки в пост"
echo ""
echo "**Описание:** $description"
echo "**Дата:** $(date)"
echo "**Загружено изображений:** ${#accessible_files[@]}"
echo ""
echo "## Код для галереи"
echo ""
echo "\`\`\`markdown"
echo "{{< gallery >}}"
for filename in "${accessible_files[@]}"; do
echo "{{< figure src=\"$S3_BASE_URL/images/$filename\" >}}"
done
echo "{{< /gallery >}}"
echo "\`\`\`"
echo ""
echo "## Код для отдельных изображений"
echo ""
echo "\`\`\`markdown"
for filename in "${accessible_files[@]}"; do
echo "![Описание]($S3_BASE_URL/images/$filename)"
done
echo "\`\`\`"
echo ""
echo "## Код с figure shortcode"
echo ""
echo "\`\`\`markdown"
for filename in "${accessible_files[@]}"; do
echo "{{< figure src=\"$S3_BASE_URL/images/$filename\" alt=\"Описание\" >}}"
done
echo "\`\`\`"
echo ""
echo "## Прямые ссылки"
echo ""
for filename in "${accessible_files[@]}"; do
echo "- $S3_BASE_URL/images/$filename"
done
echo ""
echo "---"
echo "*Код создан автоматически скриптом add-new-photos.sh*"
} > "$code_file"
log "Готовый код создан: $code_file"
# Показать краткий пример кода
echo ""
echo "=== ГОТОВЫЙ КОД ДЛЯ ВСТАВКИ ==="
echo ""
echo "{{< gallery >}}"
for filename in "${accessible_files[@]}"; do
echo "{{< figure src=\"$S3_BASE_URL/images/$filename\" >}}"
done
echo "{{< /gallery >}}"
echo ""
echo "Полный код сохранен в: $code_file"
fi
# Создание отчета
report_file="./migration-s3/upload-report-$(date +%Y%m%d_%H%M%S).txt"
{
echo "Отчет о загрузке фотографий"
echo "=========================="
echo "Дата: $(date)"
echo "Путь к исходным файлам: $photos_path"
echo "Описание: $description"
echo "Batch prefix: $batch_prefix"
echo ""
echo "Статистика:"
echo "- Найдено изображений: $total_images"
echo "- Загружено успешно: $uploaded_count"
echo "- Ошибок загрузки: $failed_count"
echo "- Доступно через CDN: ${#accessible_files[@]}"
echo ""
echo "Загруженные файлы:"
for filename in "${uploaded_files[@]}"; do
echo "- $filename"
done
echo ""
if [ ${#failed_files[@]} -gt 0 ]; then
echo "Файлы с ошибками:"
for filename in "${failed_files[@]}"; do
echo "- $filename"
done
echo ""
fi
echo "Готовый код в: $code_file"
} > "$report_file"
# Финальная статистика
log ""
log "=== ИТОГОВАЯ СТАТИСТИКА ==="
log "Найдено изображений: $total_images"
log "Загружено в S3: $uploaded_count"
log "Доступно через CDN: ${#accessible_files[@]}"
log "Ошибок: $failed_count"
log ""
if [ ${#accessible_files[@]} -gt 0 ]; then
log "🎉 ЗАГРУЗКА ЗАВЕРШЕНА! Новые изображения доступны через S3."
log "Готовый код для вставки в пост: $code_file"
else
error_log "❌ НЕ УДАЛОСЬ ЗАГРУЗИТЬ ИЗОБРАЖЕНИЯ. Проверьте настройки S3."
exit 1
fi
# Инструкции для использования
echo ""
echo "=== ИНСТРУКЦИИ ==="
echo "1. Скопируйте код из файла: $code_file"
echo "2. Вставьте код в нужный пост в директории content/post/"
echo "3. Измените alt-тексты и описания по необходимости"
echo "4. Сохраните пост и соберите сайт"
echo ""
echo "Для добавления еще фотографий запустите:"
echo " $0 /path/to/more/photos \"Описание новых фото\""