如何在Bash中将所有png文件转换为pdf?

时间:2017-01-16 02:23:18

标签: bash

for f in find *.png; do convert "$f" "$f".pdf; done

这是我必须在目录中找到png文件并将它们转换为pdf,但是我收到了错误。在Bash中执行此操作的更好方法是什么?

convert: unable to open image `find': No such file or directory @ error/blob.c/OpenBlob/2705.
convert: no decode delegate for this image format `' @ error/constitute.c/ReadImage/504.
convert: no images defined `find.pdf' @ error/convert.c/ConvertImageCommand/3257.

2 个答案:

答案 0 :(得分:4)

您提供给for循环的文件名列表字面上包含find。我想你要做的是给find输出,搜索当前目录中或下面的所有PNG图像,这是

for f in $(find . -iname '*.png'); do convert "$f" "$f".pdf; done

这不会很好地处理空间。更好的解决方案是从find本身

中运行转换
find "$PWD" -iname '*.png' -execdir convert '{}' '{}'.pdf \;

虽然请注意您最终会得到以.png.pdf

结尾的文件名

答案 1 :(得分:2)

如果您希望文件包含.pdf而不是.png.pdf,则可以使用:

  find .  -name '*.png' -exec sh -c 'convert $1 ${1%.png}.pdf' sh {} \;