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