Command-Line
提取 epub 文件的目錄
最近我點擊了將列印
mutool show file.pdf outline
我想使用與上述
epub
格式類似的簡單使用和良好結果的有沒有類似的東西?
.epub
文件是.zip
包含 XHTML 和 CSS 以及其他一些文件(包括圖像、各種元數據文件,可能還有稱為toc.ncx
包含目錄的 XML 文件)的文件。以下腳本用於
unzip -p
提取toc.ncx
到標準輸出,通過xml2命令通過管道傳輸,然後sed
僅提取每個章節標題的文本。它在命令行上接受一個或多個文件名參數。
#! /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 的文件名後跟 a
:
,然後在接下來的行中將每個章節標題縮進兩個空格。例如: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
,第二個來自xml2
。xml2
還會警告它發現的其他錯誤 - 例如格式不正確的toc.ncx
文件。請注意,錯誤消息在 stderr 上,而書的文件名仍在 stdout 上。
xml2
可用於 Debian、Ubuntu 和其他 debian-derivatives 以及可能大多數其他 Linux 發行版的預打包。對於像這樣的簡單任務(例如,您只想將 XML 轉換為面向行的格式以與
sed
、awk
、cut
、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}'