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
。