同様の名前のPDFファイルをマージ

同様の名前のPDFファイルをマージ

次の形式のPDFファイルで埋められたフォルダがあります。

SI-T-xxxxxx.pdf
SI-T-xxxxxx-sol.pdf
SI-T-yyyyyy.pdf
SI-T-yyyyyy-sol.pdf
など、中間部分は数字です。

-solなしで各ファイルペアを1つのPDFにマージする方法が必要です。

ターミナルでどうすればいいですか?ありがとう

ベストアンサー1

この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

最初のファイル名に基づいて、2番目のファイル名をプログラムで決定できます。

$ 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

おすすめ記事