Recursion without -R
Tom Christiansen
tchrist at convex.COM
Wed Aug 15 06:33:55 AEST 1990
In article <494 at llnl.LLNL.GOV> rjshaw at ramius.llnl.gov writes:
>What are some quick tricks for getting programs like chmod and chown to
>descend into all subdirectories? Programs without a -R option, that is.
Well, here's a quick way to change all files from a set of old uids and
gids to new ones. In this example, I want to change group uucp to be
1789, group staff to be 666, user kirk to be 1000, and user bill to be
7777. This code traverses the file system making those changes, omitting
NFS decents.
This is just a fragment of a larger program that does a lot of other
sanity checks and configuration stuff not included here.
#!/usr/bin/perl
$start = '/'; # do whole tree
%nuid = ( 'kirk', 1000,
'bill', 7777 );
%ngid = ( 'staff', 666,
'uucp', 1789 );
open(FIND, "find $start \\( -fstype nfs -prune \\) -o -ls |");
while (<FIND>) {
split;
$uid = $gid = -1;
($file, $user, $group) = ($_[11], $_[5], $_[6]);
if (defined $nuid{$user}) { $uid = $nuid{$user}; }
if (defined $ngid{$group}) { $gid = $ngid{$group}; }
if (($uid != -1 || $gid != -1) && !chown($uid, $gid, $file))
{ warn "$0: couldn't change $file to $uid.$gid: $!\n"; }
}
--tom
--
Tom Christiansen {uunet,uiucdcs,sun}!convex!tchrist
Convex Computer Corporation tchrist at convex.COM
"EMACS belongs in <sys/errno.h>: Editor too big!"
More information about the Comp.unix.questions
mailing list