This may come close to or straddle the "off topic" line for this list.
I thought I'd ask my question anyway since there are some who use the
More Control hint and who run into some of the same frustrations that I
do. There is a question about the use of find in this post. If you
don't want to read the reasoning behind doing this and some history skip
the following three paragraphs.
The "install directory" is an important concept in this system. It is a
directory in which any package user can write, but that files in it can
be changed only by the owner of that file--ug=rwx,o=rxt. The initial set
of these directories is listed in a file called "installdirs.lst." This
file is used to set the permissions of all directories to which
different package users could write. The most frustrating, naggy and
"four letter word" evoking event is trying to write to a directory made
by a different package user and in which the current package user cannot
write. This is the purpose of the auxiliary "install" group. The
trick, then, is to identify all the "new" directories from a package and
make them "install" directories. This used to be a really "down-in
-the-trenches" manual job.
Rob Taylor did some great work in scripting the search for new
directories. He has a series of 'find' statements that step through the
directory tree--/usr, /bin, /lib, et.al.--finding all directories and
sending them to "installdirs.lst." He then has a sed command that
removes /usr/src/ tree directories--this is the tree in which the
package users have their home directories and these should not be group
writable. He then has two statements 'chown' and 'chmod' whose input is
$(cat installdirs.lst).
This system works and is really a nice addition to package users'
support. The first 'find' statement re-creates "installdirs.lst" and
the remaining 6 append to it. And sed removes /usr/src each time. I
thought it would be more "economical" to not over write installdirs.lst
each time, and to use 'find' to identify only the new directories,
change their group ownership, then their permissions, and finally append
them to installdirs.lst. I know that find is powerful enough to ignore
/usr/src, so the need for the sed statement goes away.
Here's the find statement:
<find / -xdev -type d -gid $(id -g <packageuser name>) \! -path /usr/src
\! -path /tools -print>
This statement achieves all the parameters stated above with the
addition that it ignores /tools also. Now I would like to change group
ownership and permissions and redirect the output to installdirs.lst. I
know I could do that using an intermediate file:
find > tmpfile
chown $(cat tmpfile)
chmod $(cat tmpfile)
tmpfile >> installdirs.lst
rm tmpfile
But, and here's the real question of this post, can I do this with one
statement? Here's my first idea:
'find' | 'chown' | 'chmod' >> installdirs.lst
Or, can I use more than one -exec option in 'find'? The statement would
look something like this
find (stuff) -exec chown :install {} \; -exec chmod ug=rwx, o=rxt {} \;
>> installdirs.lst
The reason I'm asking this question is that one of my references says
"[-exec] will execute the program once per file while xargs can handle
several files with each process." I've never been successful with xargs
and I don't know if 'find' will, then ignore the second -exec. I
haven't been able to glean anymore from wandering around on the internet
and wading through man pages.
I have "piped" the output of find only once many times, but I don't know
if the output would survive two pipes.
I guess that it's just one question after all. Can I use "chained"
pipes or -execs before I redirect?
Anyone have any comments or suggestions. In the meantime, I'll just
play. What can I do, but screw things up, and I've done that twice this
week already.
Sorry for the long post. I appreciate your patience.
Thanks,
Dan
--
http://linuxfromscratch.org/mailman/listinfo/lfs-support
FAQ: http://www.linuxfromscratch.org/lfs/faq.html
Unsubscribe: See the above information page