最近ファイルディレクトリを印刷するコマンドをクリックしましたpdf
。
mutool show file.pdf outline
epub
上記の形式と同様に、使い方が簡単で良い結果を出すコマンドを使用したいと思いますpdf
。
そんなことありますか?
ベストアンサー1
.epub
ファイルは、.zip
XHTMLおよびCSSだけでなく、画像、さまざまなメタデータファイル、およびインクルードディレクトリと呼ばれるtoc.ncx
XMLファイルを含む他のファイルを含むファイルです。
次のスクリプトはstdoutにunzip -p
抽出しtoc.ncx
てパイプするために使用されます。XML2コマンドを実行し、sed
各章のタイトルのテキストのみを抽出します。
コマンドラインで1つ以上のファイル名引数を受け入れます。
#! /bin/sh
# This script needs InfoZIP's unzip program
# and the xml2 tool from http://ofb.net/~egnor/xml2/
# and sed, of course.
for f in "$@" ; do
echo "$f:"
unzip -p "$f" toc.ncx |
xml2 |
sed -n -e 's:^/ncx/navMap/navPoint/navLabel/text=: :p'
echo
done
epubというファイル名とそのあとにepubが出力され:
、次の行で各章タイトルを空白2つにインデントします。たとえば、
book.epub:
Chapter One
Chapter Two
Chapter Three
Chapter Four
Chapter Five
book2.epub:
Chapter One
Chapter Two
Chapter Three
Chapter Four
Chapter Five
epubファイルが含まれていない場合は、その特定のtoc.ncx
書籍に対して次の出力が表示されます。
book3.epub:
caution: filename not matched: toc.ncx
error: Extra content at the end of the document
最初のエラー行はから出て、unzip
2番目のエラー行はから来ますxml2
。また、間違った形式のファイルなど、見つかったxml2
他のエラーについても警告します。toc.ncx
エラーメッセージはstderrにありますが、本のファイル名はまだstdoutにあります。
xml2
Debian、Ubuntu、およびその他のDebian派生製品は、他のほとんどのLinuxディストリビューション用に事前パッケージ化することができます。
sed
このような単純な操作の場合(つまり、、、awk
などcut
で使用するためにXMLを行ベースの形式に変換したい場合grep
)。xml2
xmlstarlet
しかし、epubのタイトルも印刷するには、sed
スクリプトを次のように変更します。
sed -n -e 's:^/ncx/navMap/navPoint/navLabel/text=: :p
s!^/ncx/docTitle/text=! Title: !p'
またはスクリプトに置き換えてくださいawk
。
awk -F= '/(navLabel|docTitle)\/text/ {print $2}'