makefile - tutorial - typora español
Convertir todos los archivos en una carpeta a md usando pandoc en Mac (2)
¡Así es como lo hice!
files=($(find ${INPUT_FOLDER} -type f -name ''*.md''))
for item in ${files[*]}
do
printf " %s/n" $item
install -d ${DIR}/build/$item
pandoc $item -f markdown -t html -o ${DIR}/build/$item.html;
rm -Rf ${DIR}/build/$item
done
Estoy tratando de convertir un directorio completo de html en markdown. El árbol de directorios es bastante alto, por lo que hay archivos anidados de dos y tres niveles hacia abajo.
Al responder a esta pregunta , John MacFarlane sugirió usar el siguiente Makefile
:
TXTDIR=sources
HTMLS=$(wildcard *.html)
MDS=$(patsubst %.html,$(TXTDIR)/%.markdown, $(HTMLS))
.PHONY : all
all : $(MDS)
$(TXTDIR) :
mkdir $(TXTDIR)
$(TXTDIR)/%.markdown : %.html $(TXTDIR)
pandoc -f html -t markdown -s $< -o $@
Ahora, esto no parece ir dentro de los subdirectorios. ¿Hay alguna forma fácil de modificar esto para que procese todo el árbol?
No necesito que esto esté make
. Todo lo que estoy buscando es una forma de obtener un espejo del directorio inicial donde cada archivo html
es reemplazado por la salida de la ejecución de pandoc
en ese archivo.
(Sospecho que algo en este sentido debería ayudar, pero estoy lejos de confiar en que no romperé las cosas si trato de hacerlo por mi cuenta. Soy analfabeto cuando se trata de GNU make
).
Como mencionaste que no te importa no usar make
, puedes probar bash
.
He modificado el código de esta answer , usar en el directorio principal:
find ./ -iname "*.md" -type f -exec sh -c ''pandoc "${0}" -o "${0%.md}.pdf"'' {} /;
Funcionó cuando lo probé, por lo que debería funcionar para usted.
Según la solicitud ¿ Alguna idea de cómo especificar la carpeta de salida? (Usando html
como el archivo original y md
como la salida):
find ./ -iname "*.html" -type f -exec sh -c ''pandoc "${0}" -o "./output/$(basename ${0%.html}.md)"'' {} /;
He probado esto y funciona para mí.
Edición: Según un comentario, el {} /;
cuando se usa con find
y la opción -exec
se usa como, más o menos, marcador de posición donde debe estar el nombre de archivo. Como se expande, los nombres de archivo encontrados se colocan en el comando. El /;
termina el -exec
. Vea here para más explicación.