This site is now 100% read-only, and retired.

XML logo

Getting man pages for all commands in a package
Posted by redbeard on Sun 24 Jun 2007 at 06:00
Tags:

There's probably more ways to do this (including checking for the actual man files (just thought of that)), but I wanted man pages for all the executables in a package a little while ago. This is what I did:

dpkg -L package-name |
  awk -F / '/^\/usr\/bin\// { print $4 }' |
  xargs -n 1 man

If you have wajig installed you can use this:

wajig listfiles package-name |
  awk -F / '/^\/usr\/bin\// { print $4 }' |
  xargs -n 1 man

Both of these show off a couple of (I think) neat little tricks.

The first is the awk command. I've just started to use awk exensively. It's starting to replace grep and egrep in a lot of my pipelines. I'm also learning to use sed some.

Anyway, the trick, obvious to any halfway proficient awk user, is the -F option. It sets the field separator. In this case, each line from dpkg or wajig is a path, so I'm using a slash (/) as a the field separator. No biggie.

The second trick is the use of xargs. I have been putting everything in a for loop in cases like this. However, the other day I realized that xargs can simplify things. In this case the -n 1 parameter tells xargs to only send one parameter at a time to the called command. So, man is executed once for every line passing through awk, with that line as the only parameter.

I used the xargs trick the other day to move files to destinations specified in a file, with source and destination on the same line, separated by spaces. The file looked like:

source1 dest1
source2 dest2
source3 dest3

It was generated automatically but then edited by hand. I know there are tools available for this (the moreutils package includes vidir, for instance) but I didn't have one available. So, I ran the following command on the above file:

cat movelist | xargs -n 2 mv

Quick and simple, and got the job done.

 

Comments on this Entry

Re: Getting man pages for all commands in a package
Posted by Anonymous (194.86.xx.xx) on Tue 11 Sep 2007 at 08:40
ls /usr/*bin /*bin/ |xargs man

[ Parent ]

Re: Getting man pages for all commands in a package
Posted by redbeard (64.218.xx.xx) on Tue 11 Sep 2007 at 14:19
[ View Weblogs ]

That gives man pages for all executable binaries. I just wanted man pages for everything in a given package, which is slightly more complex. :)

[ Parent ]