Looking for reaper skeleton
Larry Wall
lwall at jpl-devvax.JPL.NASA.GOV
Tue Sep 11 11:33:37 AEST 1990
In article <1990Sep10.230742.9600 at indetech.com> david at indetech.com (David Kuder) writes:
: Or: Does anyone have a skeleton for a find equivalent written in Perl?
: I think I could do what I want from that.
This one will beat find in elapsed time on my machine, as long as you're
primarily examining just the names. If you have to stat every file, it'll
run a bit slower, but you can do away with the $nlink == 2 business.
#!/usr/local/bin/perl
&dodir('.');
sub dodir {
local($dir,$nlink) = @_;
local($dev,$ino,$mode);
($dev,$ino,$mode,$nlink) = stat('.') unless $nlink; # first time
opendir(DIR,'.') || die "Can't open $dir";
local(@filenames) = readdir(DIR);
closedir(DIR);
if ($nlink == 2) { # this dir has no subdirectories
for (@filenames) {
next if $_ eq '.';
next if $_ eq '..';
print "$dir/$_\n";
}
}
else { # this dir has subdirectories
for (@filenames) {
next if $_ eq '.';
next if $_ eq '..';
$name = "$dir/$_";
print $name,"\n";
($dev,$ino,$mode,$nlink) = lstat($_);
next unless -d _;
chdir $_ || die "Can't cd to $name";
&dodir($name,$nlink);
chdir '..';
}
}
}
Larry Wall
lwall at jpl-devvax.jpl.nasa.gov
More information about the Comp.unix.admin
mailing list