如何将所有手册重定向至文件?

如何将所有手册重定向至文件?

只是为了好玩,或者说为了方便,我决定将所有手册页写到文件中。

现在,如果我必须逐个执行,我会这样做man package-name > filename。但我想做一些聪明的工作,并一次性写入所有内容,无论是使用单个命令还是使用 bash 脚本。到目前为止,我想到的是

cd /usr/share #you may use any folder
whereis -m * | grep '.gz' |awk '{print$1}' |sed s/://g

这将给出一个输出,列出所有具有手册页的应用程序。其中的一部分如下所示。

speech-dispatcher
stellarium
synaptic
syslinux
system-config-printer
tabset
terminfo
totem
ufw
unetbootin
unity
unity-greeter
update-manager
upstart
usb_modeswitch
vim
virtualbox
vlc
xmms2
xpdf
yelp
zenity

现在,我需要做的是将此输出重定向到,man以便我可以将其重定向到文件。完成此操作后,我可以创建一个脚本来光盘到每个文件夹并检查

所以我的问题是,我该如何实现这一点?

或者,也许存在其他方法?

我正在使用 Ubuntu 12.10。

如果合适,请将其迁移到 stackoverflow。但我认为在这里更合适。

答案1

中有许多可执行文件/bin。如果你想将它们相应的手册页复制到文件中,你可以在终端中使用类似这样的命令

for f in /bin/*;do man $(basename $f) > $HOME/man_$(basename $f); done

执行该命令后,您将找到您主目录中可执行文件对应的所有手册页/bin/。例如,手册页对应于您主目录中的lswill take name man_ls.txt

如果你只想复制一部分,比如可执行文件的名称以 开头r,使用,

for f in /bin/r*;do man $(basename $f) > $HOME/man_$(basename $f); done

你可能会收到几条类似这样的信息,

No manual entry for <some_executable>
See 'man 7 undocumented' for help when manual pages are not available.

对于没有 man 条目的可执行文件。

对包含可执行文件(如、、/usr/bin//usr/sbin//sbin/的其他文件夹执行此操作。

笔记:

您可以使用2>/dev/null命令来抑制没有 man 输入的可执行文件的错误消息。例如,

for f in /usr/bin/r*;do man $(basename $f) > $HOME/man_$(basename $f) 2>/dev/null; done

根据您的方法

导航到一个文件夹并使用它获得相同的结果,

for f in $(whereis -m * | grep '.gz' |awk '{print$1}' |sed s/://g); do man $f > $HOME/man_$f.txt; done

答案2

首先,为什么您想要一个包含所有手册页的文件吗?如果是为了方便搜索所有手册页中的某个关键字,GNU 已经提供了apropos此功能:

apropos some-regular-expression

返回与其名称或描述中的正则表达式匹配的所有手册页的列表。

无论如何,如果您仍然想要百科全书文件,那么利用 apropos,您可以通过搜索通用正则表达式来获取系统上所有手册页的列表:

apropos '.*'

然后将结果列表输入到man命令中:

apropos '.*' | awk '{print $1;}' | xargs man > all-manpages.txt

您还可以使用回答类似的问题“生成所有可用命令及其各自功能的列表”,替换whatisman

相关内容