将所有Linux手册页转换为text/html或markdown

KJS*_*KJS 18 html unix linux markdown manpage

有没有办法将所有Linux手册页转换为纯文本,html或markdown?

我需要为我在系统上安装的每个man文件执行此操作.

ish*_*shi 27

是的......要改变他们中的一个,比如说,男人:

zcat /usr/share/man/man1/man.1.gz  | groff -mandoc -Thtml
Run Code Online (Sandbox Code Playgroud)

如果你想要"安装在你的电脑上的所有东西",你只需要遍历它们.对于不同的输出(例如文本),请使用不同的"device"(-T参数).

以防万一......如果'迭代'是真正的问题,你可以使用:

OUT_DIR=...

for i in `find -name '*.gz'`; do 
    dname=`dirname $i`
    mkdir -p $OUT_DIR/$dname
    zcat $i | groff -mandoc -Thtml > $OUT_DIR/$i.html
done
Run Code Online (Sandbox Code Playgroud)

  • 对于给定的手册页$ PAGE,这可行,但遗憾的是HTML生成的不是很好(内联CSS,没有类名,非语义).我想自动链接到标题等等.我自己研究手册页格式的时间...查找和输出手册页的快捷方式:````zcat $(man -w $ PAGE)| groff -mandoc -Thtml``` (6认同)

vbe*_*bem 8

使用命令man -k ''可以列出所有可用手册页的名称,这可能是优于findzcat原手册页的数据文件; 同时,man的命令有一个选项-T, --troff-device[=DEVICE],可以生成给定的man-page部分和名称的HTML.因此,以下bash脚本将Linux中可用的所有手册页转换为HTML文件:

man -k '' | while read sLine; do
    declare sName=$(echo $sLine | cut -d' ' -f1)
    declare sSection=$(echo $sLine | cut -d')' -f1|cut -d'(' -f2)
    echo "converting ${sName}(${sSection}) to ${sName}.${sSection}.html ..."
    man -Thtml ${sSection} ${sName} > ${sName}.${sSection}.html
done
Run Code Online (Sandbox Code Playgroud)

在没有Internet访问的Intranet中,联机man-pages服务不可用,将这些文件放在静态HTTP服务器(如Nginx,启用autoindex)是一个不错的选项,其中browse和Ctrl + F可能很方便.


Sco*_*eak 5

我建议尝试Pandoc

$ pandoc --from man --to html < input.1 > output.html
Run Code Online (Sandbox Code Playgroud)

它生成的 HTML 既可读又可编辑,后者对我的用例很重要。

它还可以生成许多其他格式,例如 Markdown,当您不确定要提交哪种格式时,这非常有用。

该问题有一条评论说 Pandoc 无法从 转换man,但这似乎已经过时了。man对于我的示例,当前版本(2.13)的转换效果不错html

此外,虽然公认的答案建议使用groff -mandoc -Thtml,但这对我来说并不像 Pandoc 那样好。具体来说,我想将旧的 Flex-2.5.5 手册页转换为 html。 groff(版本 1.22.4)不幸的是,破坏了所有代码示例(没有缩进,没有固定宽度字体),使它们难以阅读,而 Pandoc 将它们作为pre节带过来。此外,groff输出充满了显式内联样式,而 Pandoc 输出根本不使用 CSS,这使其成为更好的编辑起点。

(有一个现有的答案也提到了 Pandoc,我考虑将我的信息编辑到其中,但我想更多地谈谈我使用它的经验。)