Como processar vários arquivos com pandoc?

1

arquivos:

$ ls a.md b.md c.md d.md e.md

Comando: pandoc file.md -f markdown file.pdf

Como eu processaria paralelamente duas instâncias de pandoc de modo simulatneo? Possivelmente com xargs ou parallel .

Funcionaria como

Iteração / cmd 1 / cmd 2

1 / pandoc a.md -f markdown a.pdf / pandoc b.md -f markdown b.pdf

2 / pandoc c.md -f markdown c.pdf / pandoc d.md -f markdown d.pdf

3 / pandoc e.md -f markdown e.pdf / pandoc f.md -f markdown f.pdf

4 / pandoc g.md -f markdown g.pdf / pandoc h.md -f markdown h.pdf

Os arquivos são nomeados aleatoriamente.

    
por Latex_xetaL 28.10.2018 / 15:36

2 respostas

0

Grosseiramente,

#!/bin/sh

set -- *.md
while [ $# -gt 0 ]
do
  pandoc "${1} -f markdown ${1%.md}.pdf" &
  shift
  if [ $# -gt 0 ]
  then
    pandoc "${1} -f markdown ${1%.md}.pdf" &
    shift
  fi
  wait
done

Com xargs:

find . -type f -name '*.md' -print0 | xargs -0 -n2 -P2 -I{} pandoc {} -f markdown {}.pdf

você teria que renomeá-los depois, já que o resultado acima resultaria em arquivos chamados a.md.pdf, b.md.pdf, etc. Observe que, para estar seguro com nomes de arquivos, estamos pedindo para find imprimir nomes de arquivos separados por nulos e pedindo que xargs leia em entrada separada por nulo. Renomeie os arquivos com:

for f in ./*.md.pdf; do mv -- "${f}" "${f%.md.pdf}.pdf"; done
    
por 28.10.2018 / 16:05
1

Isso pode funcionar:

parallel pandoc {} -f markdown {.}.pdf ::: *.md

Se você não deseja executar um trabalho por thread de CPU, mas quer forçar 2 em paralelo:

parallel -j2 pandoc {} -f markdown {.}.pdf ::: *.md

Você pode querer gastar 15 minutos lendo o capítulo 1 + 2 do livro GNU Parallel: link (Impresso), link (Online).

    
por 30.10.2018 / 00:50