3

我想做类似的事情

find ./ -type f | parallel --gnu convert "{}" "$(basename "{}" pdf)jpg"

但它不起作用(文件被重命名为filename.pdfjpg)。我认为问题在于子进程立即执行(甚至在调用之前parallel)。我希望为每个文件执行子进程。

感谢find -exec 有多个命令,我可以做到:

find *.pdf -exec sh -c 'convert "$1" "$(basename "$1" pdf)png"' _ {} \;

但我想使用GNU parallel. 以下不起作用:

find ./ -type f | parallel --gnu sh -c 'convert "$1" "$(basename "$1" pdf)jpg"' _ {}

当然,我可以用两个命令(例如 using rename)来做到这一点,但我想学习如何用一个和用GNU parallel.

4

1 回答 1

4

如果所有文件都有.pdf扩展名,您可以使用 GNU 并行的扩展名剥离语法:

find ./ -type f | parallel --gnu convert {} {.}.jpg

(无需引用 {};parallel 为您完成。)

否则,您必须使用bash -c

find ./ -type f | parallel --gnu bash -c 'convert "$1" "${1/%.pdf}.jpg"' bash {}

(第二个bash是因为$1实际上是命令字符串之后的第二个参数。很多人喜欢使用_,因为值并不重要。)

于 2013-08-15T05:36:07.623 回答