epubファイルを抽出するディレクトリ

epubファイルを抽出するディレクトリ

最近ファイルディレクトリを印刷するコマンドをクリックしましたpdf

mutool show file.pdf outline

epub上記の形式と同様に、使い方が簡単で良い結果を出すコマンドを使用したいと思いますpdf

そんなことありますか?

ベストアンサー1

.epubファイルは、.zipXHTMLおよびCSSだけでなく、画像、さまざまなメタデータファイル、およびインクルードディレクトリと呼ばれるtoc.ncxXMLファイルを含む他のファイルを含むファイルです。

次のスクリプトは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

最初のエラー行はから出て、unzip2番目のエラー行はから来ますxml2。また、間違った形式のファイルなど、見つかったxml2他のエラーについても警告します。toc.ncx

エラーメッセージはstderrにありますが、本のファイル名はまだstdoutにあります。

xml2Debian、Ubuntu、およびその他のDebian派生製品は、他のほとんどのLinuxディストリビューション用に事前パッケージ化することができます。

sedこのような単純な操作の場合(つまり、、、awkなどcutで使用するためにXMLを行ベースの形式に変換したい場合grep)。xml2xmlstarlet

しかし、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}'

おすすめ記事