Вопрос или проблема
У меня есть директория в 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 минут. Ниже представлен детализированный скрипт, который учитывает ваши требования и устраняет недостатки текущего решения.
Подготовка окружения
-
Установите необходимые инструменты (если они еще не установлены):
sudo apt-get update sudo apt-get install unzip awscli fdupes
-
Настройка 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
Описание работы скрипта
- Поиск zip-файлов: Скрипт ищет zip-файлы в указанной директории.
- Извлечение файлов: Каждый zip-файл распаковывается во временную директорию.
- Проверка на дубликаты и загрузка: Извлеченные файлы загружаются в S3 с уникальными именами, благодаря чему предотвращается перезапись.
- Очистка среды: Временная папка удаляется, а обработанный zip-файл переименовывается для пометки.
Заключение
Данный скрипт предоставляет эффективное решение для автоматического извлечения и загрузки файлов в S3 с минимальными рисками дублирования. Рекомендуется регулярно проверять логи, чтобы убедиться в отсутствии ошибок во время выполнения скрипта. Это позволит поддерживать высокую надежность автоматизации ваших процессов работы с файлами.