pandocを使用して複数のファイルを処理する方法は?

pandocを使用して複数のファイルを処理する方法は?

文書:

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

注文する:pandoc file.md -f markdown file.pdf

2つの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スレッドごとに1つのジョブを実行せずに、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

関連情報