#!/usr/local/bin/perl # This script will upcase all the files in the current working directory # first, check to see if there are any arguments. If none, print usage $num = @ARGV; if ( $num == 0 ) { die "Usage: upcase.pl <directory>\n"; } # Check to see if object is file or link. If so, rename it now and exit $file = @ARGV[0]; if ( -f $file || -l $file ) { $ufile = "\U$file"; rename ($file,$ufile) || die "Couldn't rename file $file \n" # check to see if it is a directory. If so, call "rendir" subroutine with # this name } elsif ( -d $file ) { $topdir = $file; &rendir("$file"); # Neither file, link or directory. Either it is not here, or it is a special # file that needs to be handled elsewhere } else { die "This is not a normal file - please double check it and rename manually"; } # rename a dir and its contents to upper case. We expect to be called like: # rendir(directory); sub rendir { # localize and initialize variables local($dir, $file, $DIR); $dir = $_[0]; $DIR = "\U$dir"; # open directory handle and move to that directory opendir($DIR, "$dir") || die "Couldn't open $dir.\n"; chdir("$dir") || die "Couldn't change to $dir.\n"; # this is the main loop. Read files from the directory. Upcase the name. # if it is a directory, recursively call this subroutine. while ($file = readdir($DIR)) { $ufile = "\U$file"; if (-d $file) { if ($file ne "." && $file ne "..") {&rendir("$file");} } # if it is a file, make sure it is not already upcased elsif ( $file eq $ufile ) { next } # it's a lower case file - make it uppercase else { rename($file,$ufile); } } # go home, close the dir-handle and don't forget to rename the directory itself! chdir(".."); closedir("$DIR"); if ( $dir eq $topdir ) { if ( $dir eq $DIR ) { $dir = "\L$DIR\E"; rename($DIR,$dir) } if ( system("cp -R $dir $DIR 2>/dev/null") ) { system("cp -r $dir $DIR"); system("rm -r $dir"); } else { system("rm -R $dir"); } } else { rename($dir,$DIR); } }