Bash
合併具有相似名稱的 PDF 文件
我有一個文件夾,其中填充了這種格式的 PDF 文件:
SI-T-xxxxxx.pdf
SI-T-xxxxxx-sol.pdf
SI-T-yyyyyy.pdf
SI-T-yyyyyy-sol.pdf
以此類推,中間為數字。
我想要一種將每對文件合併到一個 pdf 中的方法,而不需要 -sol
我怎麼能在終端這樣做?謝謝
該
pdfunite
實用程序似乎可以滿足您的需求(在類似 Debian 的 Linux 發行版中,它是poppler-utils
軟體包的一部分。$ pdfunite a.pdf b.pdf c.pdf combined.pdf
另一個選項是 GhostScript:
$ gs -q -sPAPERSIZE=letter -dNOPAUSE -dBATCH -sDEVICE=pdfwrite =sOutputFile=combined.pdf a.pdf b.pdf c.pdf
ImageMagick 也會說 GhostScript,所以如果你已經熟悉了:
$ convert a.pdf b.pdf c.pdf combined.pdf
Python 還提供了一個 PDF 庫
pdftools
:$ python3 pdftools/pdfmerge.py -o combined.pdf -d a.pdf b.pdf c.pdf
無論您使用哪種工具,我們還需要一種根據您描述的標準配對文件的方法。這個大括號擴展的 glob 應該得到每對中的第一個:
SI-T-*{0..9}.pdf
所以我們可以循環過去:
for pdf in SI-T-*{0..9}.pdf; do stuff done
我們可以根據第一個文件名在程序上確定第二個文件名:
$ pdf1='SI-T-xxxxxx.pdf' $ pdf2="$(basename "$pdf1" .pdf)-sol.pdf" $ printf "%s %s" "$pdf1" "$pdf2" $ SI-T-xxxxxx.pdf SI-T-xxxxxx-sol.pdf
所以讓我們把它放到我們的循環中:
for pdf1 in SI-T-*{0..9}.pdf; do pdf2="$(basename "$pdf1" .pdf)-sol.pdf" pdf3="$(basename "$pdf1" .pdf)-combined.pdf" if ! [[ -r "$pdf2" ]]; then printf "%s not found to merge with %s; skipping" "$pdf2" "$pdf1" >&2 else convert "$pdf1" "$pdf2" "$pdf3" fi done