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

Using sh -c with find


© January 2007 Anthony Lawrence

2007/01/02

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:

Basics

Scripting

Shell



Unix/Linux Consultants

Skills Tests

Unix/Linux Book Reviews

My Unix/Linux Troubleshooting Book

This site runs on Linode





SCO Unix Sales, Support, & Service

Phone:  707-SCO-UNIX (707-726-8649Toll Free: 833-SCO-UNIX (833-726-8649)
www.SCOsales.com