背景
最近自宅の蔵書を裁断して電子書籍にしていますが
どれだけの量になったか確認したくて
色々調べてみました。
pdfinfoコマンド
たとえばsample.pdfの情報がほしい場合、次のコマンドを実行します。
$pdfinfo sample.pdf
そうすると次のような情報が得られます。
Creator: PFU ScanSnap Cloud #iX1600
Producer: PFU PDF
CreationDate: Sun Nov 20 01:55:39 2022 JST
ModDate: Sun Nov 20 01:55:39 2022 JST
Custom Metadata: no
Metadata Stream: no
Tagged: no
UserProperties: no
Suspects: no
Form: none
JavaScript: no
Pages: 204
Encrypted: no
Page size: 410 x 591 pts
Page rot: 0
File size: 23174948 bytes
Optimized: no
PDF version: 1.3
スキャナでPDFに変換していることがわかります。またページ数の情報もあります。
ここからページ数を抜いてくることができそうです。
作成したシェルスクリプト
ワンライナーできれいにやってみたかったのですが、可読性を考慮し次のように書きました。
#!/bin/bash
pages=0
for file in `find . -name '*.pdf'`; do
page=`pdfinfo ${file} | grep Pages | sed -e 's/Pages: //g'`
echo "${file} ${page}"
pages=$(($page+$pages))
done
echo "Total Page ${pages}"
内容を解説していきます。
やりたいことは各PDFファイルのページ数とファイル名を表示し、
PDFを格納するディレクトリ(サブディレクトリの配下含む)にあるPDFの総ページ数も合わせて表示することです。
注意すべきポイントを挙げていきます。
-
各PDFファイルに対しpdfinfoを実行する必要があります。
xargsが使えなかったので、for文を律儀に書くことにしました。
pdfinfoの出力からgrepでPagesを含む行を抜き出しています。
そして最後にsedでページの数字だけが残るように加工します。 -
ページ数の総和を足し上げる際は
$(())
を使わないと文字列の結合になってしまうので注意が必要です。
最後に
蔵書を自炊してPCに格納する場合、
管理が必要になります。
あり物のツールでもいいのですが、
独自のディレクトリ構造でファイルを大量に(300冊くらい)格納してしまっているので、
これからそれに合わせてツールの自作をすることが必要だと感じています。
その際やったことをこれからQiitaで報告していきたいと思うのでぜひご覧いただければと思います。