On Fri, Jun 06, 2003 at 10:28:37AM -0700, Richard Crawford wrote: > I have a script to chmod all of the files of a given name to 777, no > matter where they lie in the directory tree: > > > ################################################ > > find . -name $1 -print | while read i do > chmod 777 $i > echo "Modified: $i" > done > > ################################################ > > Now what I need it to do is to go into only those directories called > "messages" and do the same thing to files in those directories. I tried > passing "messages/*" to $1 but, of course, that didn't work. I've also > tried adding a conditional, "if (grep "\/messages\/" $i)", to the script, > but that, of course, didn't work either.
This seems like a ideal use for xargs. Try:
find . -path '*/messages/*' -type f -print0 | xargs -0 chmod 777
The -path is like -name but searches the entire relative filename (i.e.,
including the names of containing directories); the -print0 causes the output
filnames to be null-separated, so that filenames that contain returns or
linefeeds will not break the script. The -0 tells xargs to expect a
null-separated list. See the relevant man pages for full details: find(1) and
xargs(1).
--
Henry House
The attached file is a digital signature. See <http://romana.hajhouse.org/pgp>
for information. My OpenPGP key: <http://romana.hajhouse.org/hajhouse.asc>.
pgp00000.pgp
Description: PGP signature
