I found an old one-line shell script:
find ./../ -name "*.sh" -exec chmod +x \{\} \;
I understand it grants execution rights on all the shell scripts in the directories below the parent directory. However, I haven't seen the syntax \{\} \; before.
I'm guessing the backslashes escape the characters to yield {} ;, but what does that mean and why does it work?
The
\{\}means substitute the full pathname of the object that has been matched.The
\;marks the end of the arguments of the command to be executed.So
means run
chmod +x <pathname>for every<pathname>that matches the precedingfindfiltering. In this case, that will be all files with the suffix.sh.You can read more about
-execin themanentry for thefindcommand.The backslashes are required because the characters
{,}and;all have syntactic significance to the shell. So you have to tell it that they are literal characters to be passed through to thefindcommand.The pattern
"*.sh"is quoted for the same reason: to stop the shell itself from doing pathname expansion.