문서:
$ 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 등의 파일이 생성되므로 나중에 이름을 바꿔야 합니다. 파일 이름 보안을 위해 find
null로 구분된 파일 이름을 인쇄하고 xargs
null로 구분된 입력을 읽도록 요청합니다. 파일 이름을 다음으로 바꿉니다.
for f in ./*.md.pdf; do mv -- "${f}" "${f%.md.pdf}.pdf"; done