Buscando un programa o una herramienta de línea de comandos para crear plantillas de carpetas dinámicas

Hago desarrollo web y estoy usando un nuevo sistema de módulos. Cada vez que creo un nuevo módulo, tengo que volver a crear una estructura de carpetas y archivos. He escrito un archivo por lotes para hacer esto que funciona bastante bien, sin embargo, también me gustaría modificar el contenido del archivo según el nombre del módulo. Entonces, por ejemplo, me gustaría poder ejecutar un comando como:

createTemplate my-template new-module

y haga que cree la siguiente estructura de archivos/carpetas:

 /new-module
     /new-module.html
     /new-module.css

Copiaría new-module.html de /my-template/my-template.html, que también puede incluir variables como ${NAME} que se reemplazaría con "new-module" durante la creación.

Por ejemplo, my-template.html puede verse así:

<html>
  <body>
    <div>This is the <b>${NAME}</b> template</div>
  </body>
</html>

Que cuando se aplica como plantilla y se ve en el navegador simplemente se vería así:

Esta es la plantilla del nuevo módulo.

Respuestas (2)

De las "barras diagonales" utilizadas en sus ejemplos, asumo que está buscando una solución Linux/Unix. El software se envía con el sistema operativo allí, y se llama "shell" :) La siguiente línea hace este trabajo en Bash:

alias createTemplate="mkdir /${2}; cp /${1}/my-module.html /${2}/${2}.html; cp /${1}/my-module.css /${2}/${2}.css"

Por supuesto, también podría ponerlo en un script de shell que nombre createTemplatey hacerlo un poco más fácil de leer:

#!/bin/bash
# Initializing new module
template="$1"  # first parameter defines the template
module="$2"    # second parameter is the name of the new module

mkdir /${module}
cp /${template}/my-module.html /${module}/${module}.html
cp /${template/my-module.css /${module}/${module}.css

echo "Directory for module ${module} initialized."

Mejore con más variables según sea necesario :) Para obtener ayuda sobre los detalles con bash scripting, un buen lugar para consultar es nuestro sitio hermano Super User .

Mierda, olvidé decir OS, lo siento. son las ventanas De hecho, he escrito un archivo por lotes que hace básicamente lo que sugirió. Publicaré cuando llegue a casa.
En Windows, PowerShell debería ser capaz de hacer cosas similares. Pero no puedo asegurarlo. Esas cosas por lotes en Windows siempre me volvían loco;) Y sí, adivinar era difícil: las barras diagonales indicaban Linux, al igual que ${NAME}(se parece a la sintaxis de Bash). Solo el término "archivo por lotes" estaba un poco "fuera de sincronización" allí;)

Esto es lo que se me ocurrió: https://github.com/ScottBeeson/polyclone

Originalmente era específico de Polymer, pero ya no lo es. Debería cambiar el nombre del repositorio. Aquí está el código completo:

@echo off &setlocal
set /p seed= Enter Template Folder:
set /p target= Enter New Name
@echo Creating new element named "%target%"
echo Creating Folder...
md %target%

for %%i in (%seed%\*.*) do (
    set "filename=%%~ni"
    set ex=%%~xi

    if %seed%==%%~ni (
        call:WriteFile %seed%\%%~ni%%~xi %target%\%target%%%~xi
    ) else (
        call:WriteFile %seed%\%%~ni%%~xi %target%\%%~ni%%~xi
    )
)


GOTO:EOF

:WriteFile
echo Writing %~1 to %~2
set "search=${NAME}"
set "replace=%target%"
set "textfile=%~1"
set "newfile=%~2"


(for /f "delims=" %%i in ('findstr /n "^" "%textfile%"') do (
    set "line=%%i"
    setlocal enabledelayedexpansion
    set "line=!line:%search%=%replace%!"
    echo(!line!
    endlocal
))>"%newfile%"

GOTO:EOF

:EOF
echo Done!

Actualmente solo admite una variable para reemplazar, me gustaría expandir esto para leer desde algún tipo de archivo de entrada donde podría asignar múltiples variables a cadenas para reemplazar.

En este momento, todo lo que debe hacer es ejecutar "polyclone.bat" desde un símbolo del sistema y le pedirá la carpeta de la plantilla y la carpeta de destino. Luego procesará la plantilla y escribirá cada archivo reemplazando cualquier instancia de ${NOMBRE} con el nombre de destino proporcionado.

Tampoco hay soporte para subcarpetas todavía. Pero hace exactamente lo que necesito para mi situación actual.