pandoc을 사용하여 여러 파일을 처리하는 방법은 무엇입니까?

pandoc을 사용하여 여러 파일을 처리하는 방법은 무엇입니까?

문서:

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

주문하다:pandoc file.md -f markdown file.pdf

두 개의 pandoc 인스턴스를 동시에 병렬로 처리하려면 어떻게 해야 합니까? xargs또는 와 함께 있을 수 있습니다 parallel.

이렇게 작동할 거예요

반복/명령1/명령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

파일 이름은 임의로 지정됩니다.

답변1

이것은 효과가 있을 수 있습니다:

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

CPU 스레드당 하나의 작업을 실행하지 않고 대신 2개의 작업을 강제로 병렬로 실행하려는 경우:

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

GNU Parallel 책의 1장과 2장을 15분 정도 읽어보세요:http://www.lulu.com/shop/ole-tange/gnu-parallel-2018/paperback/product-23558902.html(인쇄),https://doi.org/10.5281/zenodo.1146014(온라인).

답변2

대략적으로 말하면,

#!/bin/sh

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

xargs를 사용하십시오:

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

위의 경우 a.md.pdf, b.md.pdf 등의 파일이 생성되므로 나중에 이름을 바꿔야 합니다. 파일 이름 보안을 위해 findnull로 구분된 파일 이름을 인쇄하고 xargsnull로 구분된 입력을 읽도록 요청합니다. 파일 이름을 다음으로 바꿉니다.

for f in ./*.md.pdf; do mv -- "${f}" "${f%.md.pdf}.pdf"; done

관련 정보