#! /usr/bin/perl # $rpmdir="/opt/local/linux/6.2/RPMS"; $target="RPMS/"; %rpms=(); &dodir($rpmdir); while(<>) { chomp($_); s/\s+$//; /^\s*$/ and next; print "$rpms{$_}\n"; } sub dodir() { my ($dir) = @_; my (@subdirs,@allfiles,$f,$basenm); opendir THISDIR,"$dir" or die "opendir $dir: $!\n"; @allfiles = map "$dir/$_", grep !/^\.\.?$/, readdir THISDIR; close THISDIR; for $f ( @allfiles ) { if ( -d $f ) { push @subdirs,$f; } else { $f =~ /.*\.rpm$/ and do { ($basenm=$f)=~s/^.*\/([^\/\.][^\/]*)\.rpm$/$1/; $basenm=~/\// and $basenm=""; $basenm=~s/\.(i[0-9]{3}|no[a-z]+)$//; $basenm and ($rpms{$basenm}=$f); }; } } for $f ( @subdirs ) { &dodir($f); } }