On Sun, Nov 27, 2005 at 02:57:26AM CST, Xavier Noria <fxn at hashref.com> wrote: : On Nov 27, 2005, at 4:56, Albert Lunde wrote: : >On Sat, Nov 26, 2005 at 09:24:35PM -0600, Charles Howse wrote: : >> : >>$ 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? : >>If I missed it in 'man find', please point me to the correct : >>section. :-) : > : >The semicolon is the delimiter for the end of the command being run : >by "-exec", the backslash is necessary to quote it and keep it : >from being interpreted as by the shell running "find". : : In fact, unless I want -exec to behave as a boolean test that : modifies the list of files "founded", the way -name does, I use find : (1) for finding the list of files I am interested in, and execute : what I want afterwards in a separate command. For instance like this: : : $ find ~/bin -name '*.sh' -maxdepth 1 -perm 0644 | xargs chmod 744 : : I find this much more clear. Sending the list of filenames to xargs(1) is always nice, especially because it is much more efficient and speedier. However, unlike other flavors, OS X filenames tend to contain whitespace characters that break traditional Unix tools that assume whitespace delimiters. So to be safe, change the above command to this: find ~/bin -name '*.sh' -maxdepth 1 -perm 0644 -print0 | xargs -0 chmod 744 -- Eugene http://www.coxar.pwp.blueyonder.co.uk/