newbie: to pipe the result of a program as commandlineparameter for another.

Richard Coleman richardcoleman at mindspring.com
Sat Nov 22 09:43:14 PST 2003


Zhang Weiwu wrote:

> Hello. I just checkouted a big program. What I want to do is to remove 
> all CVS/ folders from the hierarchy.
> 
> There might be other ways to do so (give me a hint?). What I can think 
> of is to run find(1) to find out all CVS folders, and pass them as 
> parameters of rm(1), but I don't know how to do so.

That's the purpose of the "xargs" command.  For instance, if you wanted 
to recursively delete all files in the directory /home/foo ending in 
".o", you could use the command

find /home/foo -name '*.o' -print | xargs rm -f

Of course, people will point out that find has options that will allow 
it to remove files directly.  But using xargs is a more general 
technique that will work in other situations.

For instance, if you wanted to "touch" all your *.c files so that they 
have current modification times, you could use the following

find /home/foo -name '*.c' -print | xargs touch

Also, xargs knows about the maximum size allowable for the command line, 
and will use the minimum number of process invocations necessary.

Richard Coleman
richardcoleman at mindspring.com




More information about the freebsd-questions mailing list