Como redirecionar todos os manuais para arquivos?

0

Apenas por diversão, ou por conveniência, decidi escrever todas as man pages nos arquivos.

Agora, se eu tiver que fazer isso um por um, eu faria man package-name > filename . Mas eu quero fazer algum trabalho inteligente e escrever todos os membros de uma vez, usando um único comando ou um script. Tudo o que eu tenho até agora é

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

Isso fornece uma saída, nomeando todos os aplicativos com páginas man. Algumas partes dela são como abaixo.

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

Agora, o que preciso fazer é redirecionar essa saída para man para que eu possa redirecioná-la para os arquivos. Depois que eu fizer isso, posso criar um script para cd para cada pasta e verifique mans .

Então, minha pergunta é: como faço isso?

OU, talvez exista uma maneira alternativa?

Estou usando o Ubuntu 12.10.

Please migrate it to stackoverflow if it's appropriate there.Though I think it's more appropriate here.

    
por Registered User 13.02.2014 / 13:16

2 respostas

0

Existem muitos executáveis em /bin . Se você quiser copiar suas man pages correspondentes em arquivos, você usa algo assim em seu terminal

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

Após a execução do comando, você encontrará todas as páginas man correspondentes aos executáveis em /bin/ em sua casa. Por exemplo, a página man corresponde a ls , receberá o nome man_ls.txt em sua casa.

Se você quiser copiar apenas uma parte, diga que o nome dos executáveis começa com r , use,

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

Você pode receber várias notas como

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

para os executáveis que não têm entrada de homem.

Faça isso para outras pastas que contenham arquivos executáveis como /usr/bin/ , /usr/sbin/ , /sbin/ etc.

Nota:

você pode usar 2>/dev/null com seu comando para suprimir as mensagens de erro para executáveis sem a entrada man. como,

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

De acordo com sua abordagem

Navegue até uma pasta e use-a para o mesmo resultado,

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

Primeiro, por que você quer um arquivo contendo todas as páginas do manual? Se é para facilitar a busca em todas elas por alguma palavra-chave, o GNU já fornece apropos para isso:

apropos some-regular-expression

retorna uma lista de todas as páginas man correspondentes à expressão regular em seu nome ou descrição.

De qualquer forma, se você ainda quiser o arquivo enciclopédico, então, fazendo uso de apropos, você pode obter uma lista de todas as páginas man no sistema procurando pela expressão regular universal:

apropos '.*'

em seguida, alimente a lista resultante no comando man :

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

Você também pode usar o método descrito na resposta para a pergunta semelhante "Gerate uma lista de todos os comandos disponíveis e o que cada um faz ", substituindo whatis por man .

    
por zwets 13.02.2014 / 14:50