我正在尝试编写一个bash脚本,该脚本使用Imagemagick将PDF转换为给定目录(作为参数传递)中的图像,然后将该转换保存到该目录的子文件夹中。我有一个脚本,可以很好地将其转换并保存到同一目录中,但是当我尝试添加路径时,我想将转换后的文件保存在脚本中断处。
到目前为止,这是我能工作的:
DIR="$@"
EXT="*.pdf"
mkdir -p "${DIR}images"
shopt -s nullglob
for pdffile in "$DIR"*.pdf; do
convert -density 300 -depth 8 -quality 90 -trim "${pdffile}" "${pdffile%.*}".jpeg
done
这是我尝试保存到子文件夹中的内容。如果我将“ images / ...”添加到转换后的最后一个参数中,如下所示:
DIR="$@"
EXT="*.pdf"
mkdir -p "${DIR}images"
shopt -s nullglob
for pdffile in "$DIR"*.pdf; do
convert -density 300 -depth 8 -quality 90 -trim "${pdffile}" "images/${pdffile%.*}".jpeg
done
这是我执行脚本时发生的情况:
$ ls foo
bar.pdf baz.pdf biz.pdf
$ ./pdf-to-img.sh foo/
convert-im6.q16: unable to open image `images/foo/bar.jpeg': No such file or directory @ error/blob.c/OpenBlob/2701.
convert-im6.q16: unable to open image `images/foo/baz.jpeg': No such file or directory @ error/blob.c/OpenBlob/2701.
convert-im6.q16: unable to open image `images/foo/biz.jpeg': No such file or directory @ error/blob.c/OpenBlob/2701.
我究竟做错了什么?
更正的代码:
DIR="$@"
EXT="*.pdf"
mkdir -p "${DIR}/images"
shopt -s nullglob
for pdffile in "$DIR"*.pdf; do
convert -density 300 -depth 8 -quality 90 -trim "${pdffile}" "$(dirname "${pdffile}")/images/$(basename "${pdffile%.*}").jpeg"
done
它应该将此images/foo/bar.jpeg
导致错误的路径转换为此foo/images/bar.jpeg
解释:
您"foo/bar.pdf"
在${pdffile}
变量中拥有像这样的价值
dirname ${pdffile}
-从路径中删除最后一个非斜杠组件,保留以下内容: "foo"
basename ${pdffile%}
-相反,删除除文件名以外的所有文件,并保留以下内容: "bar.pdf"
最后,$images
在这两个部分之间插入子目录名,并获得存储图像所需的路径- foo/images/bar.jpeg
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句