Bash

合併具有相似名稱的 PDF 文件

  • January 11, 2019

我有一個文件夾,其中填充了這種格式的 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

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