APLawrence.com -  Resources for Unix and Linux Systems, Bloggers and the self-employed

Using sh -c with find

© January 2007 Anthony Lawrence


I'm sure everyone reading here has used "-exec" with "find"; for example:

find . -name core -exec rm {} \;

When I want to do something more complex to each found file, I usually pass the name to another script:

find . -exec my shellscript {} \;

The "myshellscript" gets the filename as $1 and you go from there. There is another way to do it, though. Consider this silly example:
find . -exec sh -c '
file=`echo $1 | tr 'c' 'C'`
echo $file' foobah {} \;

The "foobah" is just a convenient way to pass "{}" to the commands. Why wouldn't you just do this?

find . -exec sh -c '
file=`echo $0 | tr 'c' 'C'`
echo $file' {} \;

Well, that wouldn't bother "find" any, but if any of your found files were executable, "find" is going to run them.. so if you happened to have a file named "rm", find would call the real "rm" to remove it. The "foobah" example is really no different: "find" will attempt to run "foobah" for every file found. If you don't know for sure that "foobah" doesn't exist or don't want to chance it, use ":"

find . -exec sh -c '
file=`echo $1 | tr 'c' 'C'`
echo $file' : {} \;

Duh.. what was I thinking? The above is totally wrong: yes, {} gets passed as $1, but it wouldn't be executed. Nor would "foobah" or anything else!

Personally, I find this type of thing more confusing and prefer a separate script.

Got something to add? Send me email.

(OLDER)    <- More Stuff -> (NEWER)    (NEWEST)   

Printer Friendly Version

-> Using sh -c with find

Inexpensive and informative Apple related e-books:

Take Control of High Sierra

El Capitan: A Take Control Crash Course

Take Control of Preview

Photos for Mac: A Take Control Crash Course

Photos: A Take Control Crash Course

More Articles by © Anthony Lawrence

Printer Friendly Version

Have you tried Searching this site?

This is a Unix/Linux resource website. It contains technical articles about Unix, Linux and general computing related subjects, opinion, news, help files, how-to's, tutorials and more.

Contact us

Printer Friendly Version

There is no reason anyone would want a computer in their home. (Ken Olson, president, chairman and founder of DEC)

Linux posts

Troubleshooting posts

This post tagged:




Unix/Linux Consultants

Skills Tests

Unix/Linux Book Reviews

My Unix/Linux Troubleshooting Book

This site runs on Linode