[vox-tech] Shell Scripting Question

Henry House vox-tech@lists.lugod.org
Fri, 6 Jun 2003 10:34:36 -0700


--EeQfGwPcQSOJBaQU
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

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:
>=20
>=20
> ################################################
>=20
> find . -name $1 -print | while read i do
>   chmod 777 $i
>   echo "Modified: $i"
> done
>=20
> ################################################
>=20
> 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 outp=
ut
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) a=
nd
xargs(1).

--=20
Henry House
The attached file is a digital signature. See <http://romana.hajhouse.org/p=
gp>
for information.  My OpenPGP key: <http://romana.hajhouse.org/hajhouse.asc>.

--EeQfGwPcQSOJBaQU
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQE+4NCsi3lu92AVGcIRAr0YAJ4oA/WHk1vnp/YSiGXxkM34IzDXfACggtUY
ELeyd/eB2nL8SjQxvxxPArU=
=gM09
-----END PGP SIGNATURE-----

--EeQfGwPcQSOJBaQU--