Bash
用於將 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.
我究竟做錯了什麼?
更正的程式碼:
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
.