次の形式の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