我想做点什么
find ./ -type f | parallel --gnu convert "{}" "$(basename "{}" pdf)jpg"
但它不起作用(文件重命名为filename.pdfjpg
)。我认为问题是子进程是立即执行的(甚至在调用parallel
之前)。我希望为每个文件执行子进程。
感谢find -exec with multiple commands我能做到:
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"' _ {}
当然,我可以使用两个命令(例如使用rename
)执行此操作,但我想了解如何使用GNU parallel
进行操作。
答案 0 :(得分:4)
如果所有文件都具有.pdf
扩展名,则可以使用GNU parallel的扩展名剥离语法:
find ./ -type f | parallel --gnu convert {} {.}.jpg
(无需引用{};并行为您做。)
否则,您必须使用bash -c
:
find ./ -type f | parallel --gnu bash -c 'convert "$1" "${1/%.pdf}.jpg"' bash {}
(第二个bash
是因为$1
实际上是命令字符串之后的第二个参数。很多人喜欢使用_
,因为这个值并不重要。)