develooper Front page | perl.beginners | Postings from March 2002

Directory creation help

Thread Previous
From:
John Marion
Date:
March 19, 2002 18:07
Subject:
Directory creation help
Message ID:
FJENIMPOGBGKJCLBEFIDMENDCAAA.jmarion1@attbi.com
I can get the files to copy but I cannot get the directories to create.  See
sub movefiles and sub move directory.

#!C:\NTRESKIT\perl
#use File::Copy;
#does C:\ntapps\common\C exist?
#add user notification using Win32::Console

$startdir = "\\ntapps\\common\\c";

@filespec = ('exe', 'dll');

@filedelete = glob ("\\junk\\save\\*.*");

#@cmd = ('dir');

$savedir  = 'C:\junk\save';

#sub searchDirectory;
#sub builddirectory;



if (-e "\\ntapps\\common\\c"){
	#Find all EXE's and DLL's
	open (OUTFILE, '>\ntapps\log\mv_common_c.lst');

	searchDirectory($startdir,"",@filespec);

	#removing files from junk\save
	unlink @filedelete;
	#rename files using the system
	system ("rename" ,'C:\junk\save\*.*', '*.old');

	close (OUTFILE);
	movefiles();

}else

	print "missing \n";
}


# use THIS TO FIND EXE'S AND DLL's
sub searchDirectory {
	# $startdir is a path name, @filespec is a list of file extensions only(ie:
exe, dll, ...)
	local($basedir,$startdir,@filespec) = @_;
	local(@lines);
	local($subdir);
	local($lvl_counter);
	local($list_length);

	#print "got to search directory\n";
	if(opendir (DIR,$basedir.$startdir))
	{
	  @lines = readdir (DIR);
	  closedir (DIR);
	  $lvl_counter = 2;
	  $list_length = ( scalar @lines );
	    while ($lvl_counter < $list_length)
	    {
	      $subdir = $startdir."\\".$lines[$lvl_counter];
	      if(!searchDirectory($basedir,$subdir,@filespec))
	      {
	        processnames($startdir.'|'.$lines[$lvl_counter],@filespec);
	      }
	      $lvl_counter++;
	    }
	}else {
		return 0;
	}
	return 1;

}


sub processnames {
	# Give the value passed to this sub a sensible name.
	my ($filename,@filespec) = @_;

	$match = join '|', @filespec;
	if ($filename =~ /($match)$/i) {
		print (OUTFILE "$filename\n");

	}
}


sub movefiles {
	local ($name, $path, $filename, $topath);
	#This is moving the files on the list we created to junk\save
	#open input file
		print "inputlist\n";
	open (INPUTLIST, '<\ntapps\log\mv_common_c.lst');
	foreach $file (<INPUTLIST>) {
		($path,$name) = split (/\|/, $file);
		if (!-e  $savedir.$path."\\" && !$path == "" ) {
			$topath = $savedir.$path;
			print "path:$path\n";
			print "making directory: $topath\n";
			#mkdir ($topath, 0777) || die "cannot mkdir $topath: $!";
			`C:\\john\\ldapps\\perl\\buildir.pl $savedir, $path`;
			##closedir dumb;
		}
		if (!-d $basedir ) {print "ouch\n" }
		$command = 'copy '.$startdir.$path."\\".$name.' C:\junk\save'.$path;
		print "$command\n";
		print "path:$topath, name:$filename\n";
		system ($command);
		last;

	}
	close (INPUTLIST);
}



#this assumes that basedir exists
sub builddirectory {
	local ($basedir, @path) = @_;
	local ($directory);
	@sublist =  ($path <1) ? (split(/\\/, $path[0])) : (@path) ;
	print "$#path, $#sublist, @path, @sublist\n";
	foreach $directory (@sublist) {
	  if ($directory =~ /\s/) { next; }
	  if (!-e $basedir.'\\' .$directory) { mkdir($basedir. '\\' .$directory,
0777); }
	  $basedir .= '\\'.$directory;
	  print "$basedir\n";

	}


}




Thread Previous


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About