Как перенаправить все мануалы в файлы?

Просто ради забавы или, скажем, ради удобства, я решил записать все справочные страницы в файлы.

Теперь, если я должен сделать это один за другим, я бы сделал man package-name > filename. Но я хочу сделать некоторую умную работу и написать всех людей одновременно, либо с помощью одной команды, либо с помощью bash-скрипта. Все, что я до сих пор придумал, это

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

. Это дает вывод, Называя все приложения, имеющие man-страницы. Часть этого, как показано ниже.

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, чтобы я мог перенаправить его в файлы. Как только я это сделаю, я могу создать скрипт для cd в каждую папку и проверьте наличие mans .

Итак, мой вопрос: как мне этого добиться?

ИЛИ, может быть, существует альтернативный способ?

Я использую Ubuntu 12.10.

Пожалуйста, перенесите его в stackoverflow, если это уместно. Хотя я думаю, что здесь уместнее.

0
задан 13 February 2014 в 16:16

2 ответа

Есть много исполняемых файлов в /bin. Если вы хотите скопировать соответствующие man-страницы в файлы, вы используете что-то подобное в своем терминале

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

После выполнения команды вы найдете все man-страницы, соответствующие исполняемым файлам в /bin/ в твой дом. Например, страница руководства, соответствующая ls, будет иметь имя 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 с вашей командой для подавления сообщений об ошибках для исполняемых файлов без участия пользователя. например,

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
0
ответ дан 13 February 2014 в 16:16

Прежде всего, , почему вам нужен файл, содержащий все страницы руководства? Если это облегчает поиск во всех них по какому-либо ключевому слову, GNU уже предоставляет apropos только для этого:

apropos some-regular-expression

возвращает список всех man-страниц, соответствующих регулярному выражению в их имени или описании.

В любом случае, если вам все еще нужен энциклопедический файл, то, используя apropos, вы можете получить список всех man-страниц в системе, выполнив поиск универсального регулярного выражения:

apropos '.*'

и затем feed результирующий список в команде man:

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

Вы также можете использовать метод, описанный в ответе на аналогичный вопрос . «Сформировать список всех доступных команд». и что каждый делает ", заменив whatis на man.

0
ответ дан 13 February 2014 в 16:16

Другие вопросы по тегам:

Похожие вопросы: