Необходимо разархивировать файлы, а затем автоматически переместить их в корзину AWS S3.

Вопрос или проблема

У меня есть директория в Ubuntu, например:

/home/ubuntu/mainfiles/

где ежедневно загружаются только zip-файлы. Мне нужно распаковать эти файлы и переместить извлеченные файлы в ведро S3. Файлы каждого распакованного архива должны перемещаться в S3 через каждые 5 минут. Мне также нужно убедиться, что дубликаты файлов не загружаются в S3.

Как мне написать скрипт для этого?

Что я делаю в настоящее время:

  • Каждые 5 минут копирую самый старый файл из /home/ubuntu/mainfiles/ директории с помощью cron и затем сохраняю его в директорию temp1.
  • Затем я распаковываю все файлы из директории temp1 и перемещаю извлеченные файлы в директорию temp2.
  • Наконец, я перемещаю все файлы из директории temp2 в S3.

Но я думаю, что вышеуказанный подход может не сработать, потому что мне нужно очищать папку temp1 каждый раз. Также дубликаты файлов могут попасть в S3, потому что я не знаю, как получить имя файла и переименовать его в случайное имя, а затем переместить в S3.

Может кто-то предоставить демонстрационный shell-скрипт с правильным подходом?

Просто, вы можете автоматизировать это с помощью bash…

#!/bin/bash
DIR='/home/ubuntu/mainfiles'
s3_DIR='/mnt/s3bucket'
for i in $DIR/*.zip;do
    unzip $DIR/$i.zip -d $S3_DIR/ && mv $DIR/$i.zip $DIR/$i.zip.done # распаковать и пометить
    fdupes -dN $S3_DIR  # удалить дубликаты файлов
done

Добавьте это в cronjob @ каждые 5 минут

Ответ или решение

Для автоматизации процесса распаковки файлов и их перемещения в Amazon S3_BUCKET с учетом обеспечения отсутствия дубликатов файлов, предлагаю использовать следующий подход на базе скрипта bash. Вам потребуется настроить cron для выполнения этого скрипта каждые 5 минут. Ниже представлен детализированный скрипт, который учитывает ваши требования и устраняет недостатки текущего решения.

Подготовка окружения

  1. Установите необходимые инструменты (если они еще не установлены):

    sudo apt-get update
    sudo apt-get install unzip awscli fdupes
  2. Настройка AWS CLI:
    Убедитесь, что AWS CLI настроен и имеет необходимые разрешения для доступа к вашему S3-бакету:

    aws configure

Скрипт для автоматизации

Создайте bash-скрипт, например, upload_to_s3.sh, с помощью следующего кода:

#!/bin/bash

# Путь к директории с zip-файлами
DIR='/home/ubuntu/mainfiles'
# Укажите имя вашего S3-бакета
S3_BUCKET='ваш-bucket-s3'

# Переменная для хранения списка zip-файлов
ZIP_FILES=($(ls $DIR/*.zip 2>/dev/null))

# Проверяем, есть ли zip-файлы для обработки
if [ ${#ZIP_FILES[@]} -eq 0 ]; then
    echo "Нет новых zip-файлов для обработки."
    exit 0
fi

# Проходим по каждому найденному zip-файлу
for ZIP_FILE in "${ZIP_FILES[@]}"; do
    # Папка для временного извлечения файлов
    TEMP_DIR=$(mktemp -d)

    # Извлечение zip-файла
    echo "Извлечение файла: $ZIP_FILE"
    unzip -q "$ZIP_FILE" -d "$TEMP_DIR"

    # Перемещение файлов в S3 с проверкой на дубликаты
    for EXTRACTED_FILE in "$TEMP_DIR"/*; do
        if [ -f "$EXTRACTED_FILE" ]; then
            # Генерация уникального имени файла
            BASENAME=$(basename "$EXTRACTED_FILE")
            UNIQUE_NAME=$(date +"%Y%m%d%H%M%S")_"$BASENAME"

            # Загрузка в S3
            echo "Загрузка файла $EXTRACTED_FILE в S3 как $UNIQUE_NAME"
            aws s3 cp "$EXTRACTED_FILE" "s3://$S3_BUCKET/$UNIQUE_NAME" --storage-class STANDARD_IA
        fi
    done

    # Удаляем временную папку
    rm -rf "$TEMP_DIR"

    # Помечаем zip-файл как обработанный
    mv "$ZIP_FILE" "$ZIP_FILE.done"
done

Настройка Cron для ежедневного выполнения

Откройте планировщик задач cron:

crontab -e

Добавьте следующую строку, чтобы запускать скрипт каждые 5 минут:

*/5 * * * * /bin/bash /path/to/your/upload_to_s3.sh >> /var/log/upload_to_s3.log 2>&1

Описание работы скрипта

  1. Поиск zip-файлов: Скрипт ищет zip-файлы в указанной директории.
  2. Извлечение файлов: Каждый zip-файл распаковывается во временную директорию.
  3. Проверка на дубликаты и загрузка: Извлеченные файлы загружаются в S3 с уникальными именами, благодаря чему предотвращается перезапись.
  4. Очистка среды: Временная папка удаляется, а обработанный zip-файл переименовывается для пометки.

Заключение

Данный скрипт предоставляет эффективное решение для автоматического извлечения и загрузки файлов в S3 с минимальными рисками дублирования. Рекомендуется регулярно проверять логи, чтобы убедиться в отсутствии ошибок во время выполнения скрипта. Это позволит поддерживать высокую надежность автоматизации ваших процессов работы с файлами.

Оцените материал
Добавить комментарий

Капча загружается...