es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mueva múltiples archivos a diferentes carpetas usando Make.

Tienes dos archivos, concretamente pyproject.toml y poetry.lock, que se encuentran en una carpeta llamada dump. Quiero mover esos archivos a 2 directorios para cuando se ejecuten las pruebas.

Hoy día hago esto:
“`
PROJECT<em>DIR := $(realpath $(CURDIR))
BUILD</em>DUMP<em>DIR := $(PROJECT</em>DIR)/dump
DESTINATION_DIRS := unit system endtoend

PY<em>SOURCES = $(patsubst %,$(BUILD</em>DUMP<em>DIR)/%, pyproject.toml)
POETRY</em>SOURCES = $(patsubst %,$(BUILD<em>DUMP</em>DIR)/%, poetry.lock)

PY<em>PROJECT = $(foreach dir, $(DESTINATION</em>DIRS), $(patsubst %, $(BUILD<em>DUMP</em>DIR)/tests/$(dir)/%, pyproject.toml))
POETRY<em>PROJECT = $(foreach dir, $(DESTINATION</em>DIRS), $(patsubst %, $(BUILD<em>DUMP</em>DIR)/tests/$(dir)/%, poetry.lock))

$(PY<em>PROJECT): $(PY</em>SOURCES)
@echo "=> Moviendo $< a $@"
@cp $< $@

$(POETRY<em>PROJECT): $(POETRY</em>SOURCES)
@echo "=> Moviendo $< a $@"
@cp $< $@

copy-dump: $(PY<em>PROJECT) $(POETRY</em>PROJECT)

“`

por lo tanto, al ejecutar el comando make copy-dump, se moverán esos archivos al directorio especificado. Me doy cuenta de que debe haber un comando MakeFile más fácil para hacer esto. Gracias por cualquier sugerencia.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en bash, shell, makefile, sh, gnu-make, sugeriría el siguiente comando Makefile para mover dos archivos, a saber, pyproject.toml y poetry.lock ubicados en una carpeta llamada dump a dos directorios para las pruebas.

    PROJECT_DIR := $(realpath $(CURDIR))
    BUILD_DUMP_DIR := $(PROJECT_DIR)/dump
    UNIT_TEST_DIR := $(BUILD_DUMP_DIR)/tests/unit
    SYSTEM_TEST_DIR := $(BUILD_DUMP_DIR)/tests/system
    ENDTOEND_TEST_DIR := $(BUILD_DUMP_DIR)/tests/endtoend
    
    copy-dump:
        @echo "Moviendo pyproject.toml y poetry.lock a los directorios de prueba..."
        @mkdir -p $(UNIT_TEST_DIR) $(SYSTEM_TEST_DIR) $(ENDTOEND_TEST_DIR)
        @cp $(BUILD_DUMP_DIR)/pyproject.toml $(UNIT_TEST_DIR)
        @cp $(BUILD_DUMP_DIR)/pyproject.toml $(SYSTEM_TEST_DIR)
        @cp $(BUILD_DUMP_DIR)/pyproject.toml $(ENDTOEND_TEST_DIR)
        @cp $(BUILD_DUMP_DIR)/poetry.lock $(UNIT_TEST_DIR)
        @cp $(BUILD_DUMP_DIR)/poetry.lock $(SYSTEM_TEST_DIR)
        @cp $(BUILD_DUMP_DIR)/poetry.lock $(ENDTOEND_TEST_DIR)
        @echo "Hecho."
    

    Para ejecutar el comando anterior, simplemente ejecute make copy-dump. Esto creará tres directorios de prueba, a saber, unit, system y endtoend, si aún no existen, y luego copiará los archivos pyproject.toml y poetry.lock desde el directorio dump a estos tres directorios de prueba.

    Espero que esta solución te ayude a alcanzar tu objetivo. Si tiene más preguntas o inquietudes, no dude en preguntar.

Comments are closed.