LinuxでPDFを一括処理するシェルスクリプト完全ガイド
毎日大量のPDFファイルを手動で処理するのは時間がかかります。Linuxのシェルスクリプトを使えば、PDF結合・圧縮・分割・変換などの作業を完全に自動化できます。本記事では、実際に使えるシェルスクリプトの例を多数紹介しながら、LinuxでのPDF一括処理の方法を解説します。定期実行のためのcron設定や、スクリプト化が不要な場合に活用できるLazyPDFも紹介します。
PDF一括結合スクリプトの作り方
フォルダ内の複数PDFを自動的に1つに結合するスクリプトを作成します。pdftkやpdfuniteを使えば、ファイル名の順序で結合することも、特定のパターンに一致するファイルだけを結合することも可能です。スクリプト化しておくことで、毎回同じコマンドを入力する手間が省けます。ログファイルへの出力も追加すると、後から処理結果を確認できて便利です。
- 1`merge_pdfs.sh` という名前のファイルを作成し、以下の内容を記述します: `#!/bin/bash\nOUTDIR="/output"\npdftk /input/*.pdf cat output $OUTDIR/merged_$(date +%Y%m%d).pdf && echo "完了: $(date)" >> /var/log/pdf_merge.log`
- 2`chmod +x merge_pdfs.sh` で実行権限を付与し、`./merge_pdfs.sh` で実行します。
- 3エラーハンドリングを追加する場合は `set -e` を先頭に追記し、エラー時に処理を停止させます。
PDF一括圧縮スクリプトの作り方
大量のPDFファイルをGhostscriptで一括圧縮するスクリプトです。元のファイルを上書きせずに、圧縮済みファイルを別フォルダに保存する設計にすると安全です。処理前後のファイルサイズを比較してログに記録することで、圧縮効果を後から確認できます。実運用では元ファイルのバックアップも必ず取るようにしましょう。
- 1`compress_all.sh` ファイルを作成します: `#!/bin/bash\nmkdir -p compressed\nfor f in *.pdf; do\n gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dNOPAUSE -dBATCH -sOutputFile="compressed/$f" "$f"\n echo "圧縮完了: $f"\ndone`
- 2`chmod +x compress_all.sh` で権限付与後、`./compress_all.sh` を実行します。
- 3圧縮前後のサイズ比較を追加する場合は `ls -lh "$f" "compressed/$f"` を圧縮後に追記します。
cronで定期実行する方法
作成したシェルスクリプトをcronに登録すれば、毎日・毎週など定期的にPDF処理を自動実行できます。例えば毎日夜中に前日のPDFを圧縮・アーカイブするタスクを自動化できます。crontabの編集は `crontab -e` コマンドで行います。スクリプトのパスは絶対パスで指定し、実行ログも必ず記録するようにしましょう。
- 1`crontab -e` でcrontabを開きます。
- 2毎日午前2時に実行する場合: `0 2 * * * /home/user/scripts/compress_all.sh >> /var/log/pdf_compress.log 2>&1` と記述して保存します。
- 3`crontab -l` でcron設定が正しく登録されているか確認します。
特定フォルダを監視してPDFを自動処理する方法
inotifywaitを使えば、特定フォルダにPDFが追加されたタイミングで自動処理を起動できます。これにより、ファイルをフォルダに入れるだけで処理が自動的に始まるワークフローを構築できます。例えばスキャン完了後に自動でOCRをかける、自動で圧縮してメールで送るなどの高度な自動化も可能です。
- 1`sudo apt install inotify-tools` をインストールします。
- 2監視スクリプトを作成します: `#!/bin/bash\ninotifywait -m -e close_write /watch_folder/ | while read path event file; do\n if [[ $file == *.pdf ]]; then\n ./compress_all.sh "$path$file"\n fi\ndone`
- 3スクリプトをバックグラウンドで実行: `nohup ./watch_and_compress.sh &`
スクリプトが不要なときはLazyPDFを活用
スクリプトの作成や管理が面倒な場合や、一時的にPDFを処理したい場合は、ブラウザで使えるLazyPDFが最適です。LazyPDFは結合・圧縮・分割など主要なPDF操作をすべてブラウザから行えます。定期処理には向いていませんが、個別のPDF処理作業を素早くこなすには非常に便利です。Linuxの主要ブラウザから問題なく使えます。
よくある質問
シェルスクリプトでPDFを処理する際に必要なツールはどれですか?
主なツールはpdftk(結合)、Ghostscript(圧縮・変換)、poppler-utils(分割・情報取得)、ImageMagick(画像変換)です。これらはすべてaptやdnfでインストールできます。
cronでPDF処理スクリプトを実行したが動かない場合は?
cronは環境変数が限られているため、スクリプト内のコマンドは絶対パスで指定してください。例えば `pdftk` の代わりに `/usr/bin/pdftk` のように記述します。ログファイルを確認するとエラー原因がわかります。
スクリプトで処理する際に元のPDFを上書きしないようにするには?
出力ファイルを別フォルダ(例:compressed/)に保存する設計にするのがベストです。または出力ファイル名に日時を付加して(`date +%Y%m%d`)上書きを防ぐ方法もあります。
LazyPDFでもPDFを一括処理できますか?
LazyPDFは複数ファイルの結合に対応していますが、完全自動のバッチ処理には向いていません。定期的な大量処理にはシェルスクリプト+cronが適しています。