Bash

如何使用 pandoc 處理多個文件?

  • October 30, 2018

文件:

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

命令:pandoc file.md -f markdown file.pdf

我將如何同時並行處理兩個 pandoc 實例?可能與xargsparallel

它會像

迭代/ 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

引用自:https://unix.stackexchange.com/questions/478266