home | O'Reilly's CD bookshelfs | FreeBSD | Linux | Cisco | Cisco Exam  


UNIX Power Tools

UNIX Power ToolsSearch this book
Previous: 17.10 Running Commands on What You Find Chapter 17
Finding Files with find
Next: 17.12 Finding Many Things with One Command
 

17.11 Using -exec to Create Custom Tests

Here's something that will really make your head spin. Remember that -exec doesn't necessarily evaluate to "true"; it only evaluates to true if the command it executes returns a zero exit status ( 44.7 ) . You can use this to construct custom find tests.

Assume that you want to list files that are "beautiful." You have written a program called beauty that returns zero if a file is beautiful, and non-zero otherwise. (This program can be a shell script ( 44.11 ) , a perl ( 37.1 ) script, an executable from a C program, or anything you like.)

Here's an example:

% 

find . -exec beauty {} \; -print

In this command, -exec is just another find operator. The only difference is that we care about its value; we're not assuming that it will always be "true." find executes the beauty command for every file. Then -exec evaluates to true when find is looking at a "beautiful" program, causing find to print the filename. (Excuse me, causing find to evaluate the -print . :-) )

Of course, this ability is capable of infinite variation. If you're interested in finding beautiful C code, you could use the command:

% 

find . -name "*.[ch]" -exec beauty {} \; -print

And so on. For performance reasons, it's a good idea to put the -exec operator as close to the end as possible. This avoids starting processes unnecessarily; the -exec command will execute only when the previous operators evaluate to true.

- JP , ML


Previous: 17.10 Running Commands on What You Find UNIX Power Tools Next: 17.12 Finding Many Things with One Command
17.10 Running Commands on What You Find Book Index 17.12 Finding Many Things with One Command

The UNIX CD Bookshelf Navigation The UNIX CD BookshelfUNIX Power ToolsUNIX in a NutshellLearning the vi Editorsed & awkLearning the Korn ShellLearning the UNIX Operating System