Bash

用於將 PDF 轉換為圖像並保存在子文件夾中的 Shell 腳本

  • May 14, 2017

我正在嘗試編寫一個 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.

引用自:https://unix.stackexchange.com/questions/364711