[X-Unix] question about 'find'

James Bucanek subscriber at gloaming.com
Sat Nov 26 22:06:07 PST 2005


Charles Howse wrote on Saturday, November 26, 2005:

>$ find ~/bin -name \*.sh -maxdepth 1 -perm 0644 -exec chmod 744 {} \;
>
>This works as expected (I found the '\;' part on a web site), but I'm not
>sure why I have to use the '\' as the next-to-last character.
>Can't find anything about it in 'man find'.
>Can anyone enlighten me?

The semicolon syntax is clearly documented in each argument that takes a variable number of arguments:

     -exec utility [argument ...];
             ...  Optional arguments may be passed to the utility.
             The expression must be terminated by a semicolon (``;'').
             ...
     
     ...

     -execdir utility [argument ...];

     -ok utility [argument ...];

     -okdir utility [argument ...];

     ...

The fact that you have to escape a semicolon on the command line is an issue with the shell you are using, not find. Although that fact is still noted in find's man page:

  BUGS
     The special characters used by find are also special characters to many
     shell programs.  In particular, the characters ``*'', ``['', ``]'',
     ``?'', ``('', ``)'', ``!'', ``\'' and ``;'' may have to be escaped from
     the shell.

>If I missed it in 'man find', please point me to the correct section.  :-)

Man pages are sometimes hard to read, but after this many years the core ones are pretty complete, having been picked over by a thousand software engineers.

-- 
James Bucanek


More information about the X-Unix mailing list