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.
答案 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 {} \;