Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 13 Mar 2005 03:12:20 -0800
From:      "Loren M. Lang" <lorenl@alzatex.com>
To:        Fafa Diliha Romanova <fteg@london.com>
Cc:        freebsd-questions@freebsd.org
Subject:   Re: chmod equivalent to find commands
Message-ID:  <20050313111220.GH18080@alzatex.com>
In-Reply-To: <20050313103312.1A2E84BE6D@ws1-1.us4.outblaze.com>
References:  <20050313103312.1A2E84BE6D@ws1-1.us4.outblaze.com>

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

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

On Sun, Mar 13, 2005 at 05:33:12AM -0500, Fafa Diliha Romanova wrote:
>=20
> I think it's really best that I stick to my find commands.
>=20
> chmod -R u=3DrwX,go=3DrX . worked really fast but it also made all
> my files executable.

That should only of happened if they already had at least one execute
bit set.  Now if you mistyped it as a lower-case x, then it's garenteed
to set the execute bit.

>=20
> Bad idea, asking for such a command.
>=20
> By the way, umask 022? What is meant by that?

umask is used to mask off certain permission bits from being set when a
file is created.  Most files are created with permissions 666, but a
umask of 022 will mask it to 644.  For directories it would mask 777 to
755.  Other common umask are 002, 027, and 077.

Umask:  022 002 027 077 022 002 027 077
Start:  666 666 666 666 777 777 777 777
Finish: 644 664 640 600 755 775 750 700

The techninal operation is "mode & ~umask"

Now when you use the string =3DrwX instead of something like u=3DrwX, no
qualifier in front of the =3D, +, or - sign, then it sets all bits minus
what is masked off so a umask of 022 will prevent it from setting the
write bit on group or other permissions.

>=20
> ----- Original Message -----
> From: "Loren M. Lang" <lorenl@alzatex.com>
> To: "Giorgos Keramidas" <keramida@ceid.upatras.gr>
> Subject: Re: chmod equivalent to find commands
> Date: Sun, 13 Mar 2005 02:15:00 -0800
>=20
> >=20
> > 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 {} \;
> > >
> > > Uhm, why?  Even if that were possible, isn't clarity more important t=
hat
> > > stuffing as many actions as possible in one line?
> > >
> > > What you list above is similar to the way I use for changing the
> > > permissions of files/dirs and it works all the time.
> > >
> > > 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:
> >=20
> > 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.
> >=20
> > chmod -R u=3DrwX,go=3DrX .
> >=20
> > My umask of 022 simplifies the command to the following:
> >=20
> > chmod -R =3DrwX .
> >=20
> > >
> > > 	find . | while read line; do
> > > 		mode=3D''
> > > 		[ -d "${line}" ] && mode=3D0755
> > > 		[ -f "${line}" ] && mode=3D0644
> > >
> > > 		[ -n "${mode}" ] && echo "chmod ${mode} \"${line}\""
> > > 	done | sh
> > >
> > > But this is getting quickly very difficult to remember easily and rep=
eat
> > > consistently every time you want to do something similar :)
> > >
> > > >> 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
> > >
> > > This is an excellent way to do this, IMHO.
> > >
> > > > If you were feeling crazy and use sh:
> > > >
> > > > find . | while read path; do \
> > > >   if [ -d "$path" ]; then chmod 755;
> > > >   else chmod 644; fi; \
> > > > done
> > >
> > > I guess you meant to write:
> > >
> > >     find . | while read path; do \
> > >       if [ -d "$path" ]; then chmod 755 "${path}";
> > >       else chmod 644 "${path}"; fi; \
> > >     done
> > >
> > > Otherwise, many chmod failures are the only result.
> > >
> > > 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).
> > >
> > > - Giorgos
> > >
> > > _______________________________________________
> > > freebsd-questions@freebsd.org mailing list
> > > http://lists.freebsd.org/mailman/listinfo/freebsd-questions
> > > To unsubscribe, send any mail to "freebsd-questions-unsubscribe@freeb=
sd.org"
> >=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.
> >=20
> > Public Key: ftp://ftp.tallye.com/pub/lorenl_pubkey.asc
> > Fingerprint: CEE1 AAE2 F66C 59B5 34CA  C415 6D35 E847 0118 A3D2
> >=20
> << 2.dat >>
>=20
> --=20
> ___________________________________________________________
> Sign-up for Ads Free at Mail.com
> http://promo.mail.com/adsfreejump.htm
>=20

--=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

--7SAgGoIHugoKhRwh
Content-Type: application/pgp-signature
Content-Disposition: inline

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

iD8DBQFCNCAUbTXoRwEYo9IRArjuAJ9YEJdlq+td4kbIuPDgMoU631GwfwCdFTII
Y5ayBQS/ucWeQzRt6JAgygs=
=YHfs
-----END PGP SIGNATURE-----

--7SAgGoIHugoKhRwh--



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