Замените файлы в одной директории на файлы с теми же именами из другой.

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

У меня есть два репозитория для веб-сайта: один для бекенда, другой дляFrontend. Я хочу скопировать файлы из папки фронтенда в директорию бекенда, чтобы всё можно было обслуживать из одного места.

Когда я запускаю команду build на фронтенде, создаётся папка с именем dist/. Я хочу скопировать все эти файлы в папку с относительным путем ../backend/public. Эта папка public может уже содержать некоторые другие файлы.

Мой текущий скрипт использует зашитые в код имена для index.html и директории assets/, но со временем может добавляться больше файлов, поэтому я хотел бы получить универсальное решение, которое будет копировать всё, что не изменилось в dist/, в ../backend/public.

#!/bin/bash
cd ../backend/public
rm -rf index.html assets

cp ../../frontend/dist/index.html ./
cp -r ../../frontend/dist/assets ./assets

Ваш скрипт можно сократить до:

#!/bin/bash

## удалите директорию assets, если она существует
[ -d ../backend/assets ] && rm -rf ../backend/assets
cp -r dist/{index.html,assets} ../backend

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

Чтобы сделать это более универсальным, вы можете передать список файлов/директорий, которые хотите скопировать:

#!/bin/bash

for item in "$@"; do
   ## удалите директорию assets, если она существует
   [ -d ../backend/"$item" ] && rm -rf ../backend/"$item"
   cp -r dist/"$item" ../backend
done

Который вы затем выполните из директории frontend следующей командой:

script.sh assets index.html

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

Замена файлов в одном каталоге файлами с одинаковыми именами из другого

В рамках разработки веб-приложений на основе раздельного подхода к архитектуре, часто возникает необходимость синхронизации файлов между различными репозиториями. В вашем случае, вы хотите заменить файлы в каталоге ../backend/public файлами, сгенерированными в результате сборки фронтенда из папки dist/ в вашем проекте. Подход, который вы используете в своей скриптовой команде, можно улучшить, сделав процесс более универсальным и менее зависимым от статических имен файлов.

Проблема

Ваш текущий подход использует статическую привязку к имени файла index.html и каталогу assets, что может вызвать ряд проблем при добавлении новых файлов или изменениях в структуре каталога. Кроме того, метод удаления существующих файлов перед копированием может привести к потере важных данных, если в каталоге public находятся файлы с другими именами.

Решение

Поскольку вам необходимо скопировать только изменённые файлы из dist/ в ../backend/public, предлагаю следующий уровень абстракции, который позволит вам легко управлять копированием различных файлов и каталогов.

Оптимизированный скрипт

Вам стоит использовать следующий скрипт, который позволяет гибко передавать необходимые файлы для копирования:

#!/bin/bash

# Цель скрипта - обновить файлы в каталоге ../backend/public
for item in "$@"; do
   # Проверяем существование директории
   [ -d "../backend/$item" ] && rm -rf "../backend/$item"
   cp -r "dist/$item" "../backend/"
done
Инструкция по выполнению
  1. Сохраните скрипт в файл: Например, назовите его update_backend.sh и дайте ему права на выполнение с помощью команды chmod +x update_backend.sh.

  2. Запустите скрипт из каталога фронтенда: Чтобы скопировать файлы, достаточно вызвать скрипт, перечисляя необходимые элементы:

    ./update_backend.sh assets index.html другие_файлы

    Здесь в другие_файлы вы можете добавлять любые дополнительные имена файлов или директорий, которые необходимо синхронизировать.

Преимущества использования данного подхода

  1. Гибкость: Вы можете передавать любой набор файлов или каталогов для копирования без необходимости изменения самого скрипта.
  2. Безопасность: Удаляются лишь директории, после чего остается возможность для хранения файлов с другими именами, если в них есть необходимость.
  3. Простота в управлении: Перенос скрипта в потенциально новый проект или окружение займет минимальное время, что значительно упрощает процесс развертывания.

Заключение

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

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

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