ファイル:
$ ls a.md b.md c.md d.md e.md
コマンド:pandoc file.md -f markdown file.pdf
2つのpandocインスタンスを同時に並行して処理するにはどうすればよいですか?おそらくxargs
またはparallel
を使用します。
それは次のように機能します
反復/ cmd 1/cmd 2
1/pandoc a.md-fマークダウンa.pdf/pandoc b.md-fマークダウンb.pdf
2/pandoc c.md-fマークダウンc.pdf/pandoc d.md-fマークダウンd.pdf
3/pandoc e.md-fマークダウンe.pdf/pandoc f.md-fマークダウンf.pdf
4/pandoc g.md-fマークダウンg.pdf/pandoc h.md-fマークダウンh.pdf
ファイルにはランダムな名前が付けられます。
粗雑に、
#!/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
Xargsの場合:
find . -type f -name '*.md' -print0 | xargs -0 -n2 -P2 -I{} pandoc {} -f markdown {}.pdf
上記の場合、a.md.pdf、b.md.pdfなどの名前のファイルが作成されるため、後で名前を変更する必要があります。ファイル名を安全に保つために、find
に印刷を依頼していることに注意してください。 nullで区切られたファイル名とxargs
にnullで区切られた入力を読み込むように要求します。次の名前でファイルの名前を変更します。
for f in ./*.md.pdf; do mv -- "${f}" "${f%.md.pdf}.pdf"; done
これはうまくいくかもしれません:
parallel pandoc {} -f markdown {.}.pdf ::: *.md
CPUスレッドごとに1つのジョブを実行したくないが、2つを並列に強制したい場合:
parallel -j2 pandoc {} -f markdown {.}.pdf ::: *.md
GNU Parallel book: http://www.lulu.com/shop/ole-tange/gnu- parallel-2018/paperback/product-23558902.html (印刷)、 https://doi.org/10.5281/zenodo.1146014 (オンライン)。