Programeer opdrachtenOpdracht : opdr3_pascal.txt

Terug naar de inzendingen
Opdracht 3,Pascal Schiks
19-Feb-2005
 
 Mijn PERL versie
 Het programma kan worden opgestart met een directory als parameter.
 Zonder deze parameter, zal de huidige directory gekozen worden.
 
 1 
*****picnum.pl*****
  
 2#!/usr/bin/perl -w
 3# Title    : picnum.pl
 4# Function : Rename/renum all pictures in given directory
 5# Author   : Pascal Schiks (C) 2005 GNU/GPL
 6
 7use strict;
 8
 9my $name="foto";
 10my $filenr="0000";
 11my $directory="/home/pascal/fotos/rs6000";
 12
 13my @oldfiles;
 14my @newfiles;
 15my %files;
 16my $oldname;
 17my $newname;
 18my $ext;
 19
 20my $renamecount;
 21my $totalfiles;
 22my $passes;
 23
 24print "@ARGV\n\n";
 25if(defined(@ARGV))
 26{
 27  $directory=@ARGV[0];
 28}
 29else
 30{
 31  $directory=".";
 32}
 33
 34if(opendir(DIRECTORY, $directory))
 35{
 36  # get all files in directory
 37  @oldfiles=sort(readdir(DIRECTORY));
 38  close(DIRECTORY);
 39
 40  # remove directories from the list
 41  foreach(@oldfiles)
 42  {
 43    if((m/^..$/)|(m/^.$/))
 44    {
 45      $_="";
 46    }
 47  }
 48  # for each file find a new name
 49  foreach(@oldfiles)
 50  {
 51    # files already rename or are not relevant wil be expelled from the list
 52    if(!($_ eq ""))
 53    {
 54      # if file is a picture
 55      if((m/.jpg$/)||(m/.JPG$/)||(m/.gif$/)||(m/.GIF$/)||(m/.png$/)||(m/.PNG$/))
 56      {
 57        $oldname=$_;
 58        $ext="";
 59        if((m/.jpg$/)||(m/.JPG$/))
 60        {
 61          $ext=".jpg";
 62        }
 63        if((m/.gif$/)||(m/.GIF$/))
 64        {
 65          $ext=".gif";
 66        }
 67        if((m/.png$/)||(m/.PNG$/))
 68        {
 69          $ext=".png";
 70        }
 71        $filenr++;
 72        $newname="$name$filenr$ext";
 73        $newfiles["$filenr"]=$newname;
 74        # fill the hash
 75        $files{$oldname}=$newname;
 76      } # if picture
 77    } # if ! eq ""
 78  } # foreach @oldfiles
 79
 80
 81  print "Renaming files in directory $directory\n";
 82  # execute this rename loop until no more changes
 83  $passes=0;
 84  $totalfiles=0;
 85  do
 86  {
 87    $passes++;
 88    # rename files
 89    $renamecount=0;
 90    for $oldname(keys %files)
 91    {
 92      my $oldpath;
 93      my $newpath;
 94      $newname=$files{$oldname};
 95      $oldpath="$directory/$oldname";
 96      $newpath="$directory/$newname";
 97
 98      # Do not overwrite files !
 99      if(! -e $newpath)
 100      {
 101        rename $oldpath,$newpath;
 102        print "move $oldname -> $newname\n";
 103        delete $files{$oldname};
 104        $renamecount++;
 105        $totalfiles++;
 106      }
 107    }
 108  }
 109  while($renamecount);
 110  print "$totalfiles Files renamed\n";
 111  print "in $passes Passes\n";
 112}
 113else
 114{
 115  print "Error, could not open directory $directory\n";
 116}