PDFを画像に変換してサブフォルダに保存するシェルスクリプト

PDFを画像に変換してサブフォルダに保存するシェルスクリプト

Imagemagickを使用してPDFを指定されたディレクトリ(パラメータとして渡される)の画像に変換し、そのディレクトリのサブフォルダに変換を保存するbashスクリプトを作成しようとしています。同じディレクトリに完全に変換して保存するスクリプトがあり、パスを追加しようとすると、スクリプトが中断された場所に変換されたファイルを保存したいと思います。

これが今まで私にとって効果的です。

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

関連情報