Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 13 Mar 2005 02:15:00 -0800
From:      "Loren M. Lang" <lorenl@alzatex.com>
To:        Giorgos Keramidas <keramida@ceid.upatras.gr>
Cc:        Fafa Diliha Romanova <fteg@london.com>
Subject:   Re: chmod equivalent to find commands
Message-ID:  <20050313101500.GE18080@alzatex.com>
In-Reply-To: <20050312195302.GA77874@gothmog.gr>
References:  <20050312115359.C14EF4BE6D@ws1-1.us4.outblaze.com> <42330B26.2040508@haystacks.org> <20050312195302.GA77874@gothmog.gr>

next in thread | previous in thread | raw e-mail | index | archive | help

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

On Sat, Mar 12, 2005 at 09:53:02PM +0200, Giorgos Keramidas wrote:
> On 2005-03-12 10:30, Eric McCoy <emccoy@haystacks.org> wrote:
> >Fafa Diliha Romanova wrote:
> >> hello.
> >>
> >> i know there's an equivalent to these two find commands that
> >> can be summed up in one chmod command:
> >>
> >> find . -type d -exec chmod 755 {} \;
> >> find . -type f -exec chmod 644 {} \;
>=20
> Uhm, why?  Even if that were possible, isn't clarity more important that
> stuffing as many actions as possible in one line?
>=20
> What you list above is similar to the way I use for changing the
> permissions of files/dirs and it works all the time.
>=20
> There's no reason to try to write one, long, complicated command just
> for the sake of making it one command instead of two.  Otherwise, you
> may as well do more complex stuff like:

Summing it up into one command does not neccessarily mean it's longer or
more complicated.  I use the following command all the time to fix
permissions similar to what he seems to be doing.  Though it's not
technically equivalent, it's probably all he needs.

chmod -R u=3DrwX,go=3DrX .

My umask of 022 simplifies the command to the following:

chmod -R =3DrwX .

>=20
> 	find . | while read line; do
> 		mode=3D''
> 		[ -d "${line}" ] && mode=3D0755
> 		[ -f "${line}" ] && mode=3D0644
>=20
> 		[ -n "${mode}" ] && echo "chmod ${mode} \"${line}\""
> 	done | sh
>=20
> But this is getting quickly very difficult to remember easily and repeat
> consistently every time you want to do something similar :)
>=20
> >> what would be the best solution here?
> >
> > I would do it the same way you do, but with xargs instead:
> >
> > find . -type X -print0 | xargs -0 chmod XXX
>=20
> This is an excellent way to do this, IMHO.
>=20
> > If you were feeling crazy and use sh:
> >
> > find . | while read path; do \
> >   if [ -d "$path" ]; then chmod 755;
> >   else chmod 644; fi; \
> > done
>=20
> I guess you meant to write:
>=20
>     find . | while read path; do \
>       if [ -d "$path" ]; then chmod 755 "${path}";
>       else chmod 644 "${path}"; fi; \
>     done
>=20
> Otherwise, many chmod failures are the only result.
>=20
> But this has a minor buglet.  It will change everything that is not a
> directory to mode 0644.  This mode is ok for files, but it may not be ok
> (or it may even fail) for other stuff (symbolic links, for instance).
>=20
> - Giorgos
>=20
> _______________________________________________
> freebsd-questions@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-questions
> To unsubscribe, send any mail to "freebsd-questions-unsubscribe@freebsd.o=
rg"

--=20
I sense much NT in you.
NT leads to Bluescreen.
Bluescreen leads to downtime.
Downtime leads to suffering.
NT is the path to the darkside.
Powerful Unix is.

Public Key: ftp://ftp.tallye.com/pub/lorenl_pubkey.asc
Fingerprint: CEE1 AAE2 F66C 59B5 34CA  C415 6D35 E847 0118 A3D2
=20

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

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

iD8DBQFCNBKkbTXoRwEYo9IRAgIBAJ9k9Q6M632ClfESlmQKoD2nWM8ApgCeJY0f
UUVl6DqB3LWY/Idsijhg41U=
=FKF7
-----END PGP SIGNATURE-----

--VUDLurXRWRKrGuMn--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050313101500.GE18080>