Bash
如何使用 pandoc 處理多個文件?
文件:
$ ls a.md b.md c.md d.md e.md
命令:
pandoc file.md -f markdown file.pdf
我將如何同時並行處理兩個 pandoc 實例?可能與
xargs
或parallel
。它會像
迭代/ 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
這些文件是隨機命名的。
粗略地說,
#!/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
列印以空值分隔的文件名並詢問xargs
讀入空分隔的輸入。使用以下命令重命名文件:for f in ./*.md.pdf; do mv -- "${f}" "${f%.md.pdf}.pdf"; done