# # Using sh -c with find
APLawrence.com -  Resources for Unix and Linux Systems, Bloggers and the self-employed

Using sh -c with find

I've removed advertising from most of this site and will eventually clean up the few pages where it remains.

While not terribly expensive to maintain, this does cost me something. If I don't get enough donations to cover that expense, I will be shutting the site down in early 2020.

If you found something useful today, please consider a small donation.



Some material is very old and may be incorrect today

© 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.


If you found something useful today, please consider a small donation.



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