[UCLA-LUG] file uid stuff
Denis
denis@seas.ucla.edu
Fri, 18 Feb 2000 11:51:50 -0800
hey, Chris !
> i didn't
> test this or anything, so i don't know if it'll work right.
dude, you're like Knuth, who said something like "I dont know if this code
will work. I have only
proven it to be correct" :)
denis
>
> #!/usr/local/bin/perl -T
>
> my %curowner = ();
>
> $mount = $ARGV[0];
> lstat($mount);
> ($mount =~ /^\// && -d _) || die "usage: $0 /path/to/mount/point\n";
> &recurse($mount);
>
> open(I,"<uid_map") || die "open(uid_map): $!";
> while (<I>) {
> my ($old,$new) = split(/\s/);
> my (@files) = split(/\0/,$curowner{$old});
> delete $curowner{$old};
> chown $new, @files;
> }
> close I;
>
> sub recurse {
> my ($mount) = @_;
> my @entries = ();
> my @v = ();
> my $done = 0;
> my $e = '';
>
> opendir I,"$mount" || return;
> @entries = readdir(I) || return;
> foreach $e ( @entries ) {
> next if $e eq '.' || $e eq '..';
> (@v) = lstat ("$mount/$e");
> $curowner{$v[4]} .= "$e" . "\0" if -d _ || -f _;
> &recurse("$mount/$e") if -d _;
> }
> closedir I;
> }
>
>
>
> On Fri, 18 Feb 2000, Glenn Glazer wrote:
>
> > Hi, Dimi.
> >
> > You are right that this method is faster given the restriction that you
> > impose, namely that the files all belong to one user. However, I
> > understood the question to be of larger scope, for example, chown all
files
> > of all users whose UID is in the 10000's (10[0-9][0-9][0-9]). Then,
your
> > method would have to be repeated for each user, whereas my method just
uses
> > the regexp in the appropriate place. Also, in some business contexts,
the
> > manager of the group owns the group files. So, if you change managers
you
> > can grep on the group name instead of the user name (for this use the ls
> > method, not the find method).
> >
> > Also, for Justin if he is still listening: add -xdev as an argument to
the
> > find command. This will keep you from wandering into the /dev
directories
> > by accident. -type f is insufficient for this (though you will want to
> > keep it for the other reasons.)
> >
> > Best,
> >
> > Glenn
> >
> > P.S. While thinking about this, I coined a new term of venery: a regexp
of
> > users. :) -GMG
> >
> > At 12:44 PM 2/17/00 -0800, you wrote:
> > >This problem really got me to thinkin... :)
> > >I would approach it like this: In high likelihood, all the files under
a
> > >particular user's home directory are owned by him. With this
assumption,
> > >one could do a recursive chown -R dimator.dimator /home/dimator/
> > >
> > >But, there exists the possibility that there are some files in my home
> > >directory that I do not own. Since these are the exception to the
norm, I
> > >would do a 'find' for these few files, and hang on to them in a temp
> > >file. Then after I did the recursive chown above, I would deal with
the
> > >exceptions in the temp file accordingly, chown'ing each of these to its
> > >appropriate uid/gid.
> > >
> > >This has the (small?) advantage of calling less chown's, because your
> > >'find' forks chown on each file seperately, wherease I make one
recursive
> > >chown call (which I assume is cheaper to run) and then x (where x is
the
> > >number of non-dimator owned files in my path; x << total files under
> > >/home/dimator) chown's on the exception files.
> > >
> > >hope all that is clear. :)
> > >
> > >Dimi
> > >
> > >
> > >On Thu, 17 Feb 2000, Justin Boseant wrote:
> > >
> > >> anyone know anything you can us in if [ ... ] to check if the uid of
a
> > >> file matches a variable? I'm trying to switch all the user ids on a
> > >> bunch of disks to new ones and my current idea uses 'find ./ -user
...'
> > >> for each disk and loops through each pair of old/new ids. I know its
> > >> going to be time consuming either way, but is it more efficient to go
> > >> through case statements for each file or go through the file system
for
> > >> each case (i.e. recursion vs. iteration, sort of).
> > >>
> > >> Any input is greatly apreciated.
> > >>
> > >> -justin
> > >>
> > >> p.s. I like ispell, I just don't use it enough
> > >>
> > >>
> > >> _______________________________________________
> > >> UCLALUG Linux mailing list - Linux@linux.ucla.edu
> > >> http://linux.ucla.edu/mailman/listinfo/linux
> > >>
> > >
> > >
> > >_______________________________________________
> > >UCLALUG Linux mailing list - Linux@linux.ucla.edu
> > >http://linux.ucla.edu/mailman/listinfo/linux
> >
> >
> > _______________________________________________
> > UCLALUG Linux mailing list - Linux@linux.ucla.edu
> > http://linux.ucla.edu/mailman/listinfo/linux
> >
>
>
>
>
> _______________________________________________
> UCLALUG Linux mailing list - Linux@linux.ucla.edu
> http://linux.ucla.edu/mailman/listinfo/linux
>