将PDF转换为图像并保存在子文件夹中的Shell脚本

将PDF转换为图像并保存在子文件夹中的Shell脚本

我正在尝试编写一个 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.

我究竟做错了什么?

答案1

更正后的代码:

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

相关内容