Blog

Date Rename

This perl program renumbers files by their creation date. Possible arguments are file-extension and basename.

Examples:

- daterename -e jpg -n "pic\_"
- daterename -e jpg -n ""

Here is the code:

#!/usr/bin/perl -w
use Cwd;
use strict;
use warnings;
 
sub daterename($$)
{
  my $type = shift;
  my $name = shift;
  my $path = getcwd();
  my %fhash;
  my $muster = $path."/*.".$type;
  my @globbing = glob($muster);
  my $glength = @globbing;
 
  unless ($glength == 0)
  {
    foreach my $filename (@globbing)
    {
      my @a = stat($filename);
      $fhash{"$filename"} =  $a[9];
    }
    my $index = 1;
    foreach my $file
    (
       sort{$fhash{$a} cmp $fhash{$b}}
       keys %fhash
    )
    {
      print "rename $file\t to $name$index\n";
      rename($file, $name.$index.".".$type);
      $index++;
    }
  }
  else
  {
    print "Nothing to do\n";
  }
}
 
sub help()
{
  print "usage of daterename:\n";
  print "  required parameters:\n";
  print "    -n   basename of the files\n";
  print "    -e   file-extension (like jpg...)\n";
  print "  optional parameters:\n";
  print "         none at the moment\n";
}
 
my $type = "null";
my $name = "null";
my $l = @ARGV;
 
for(my $i = 0; $i < $l ; $i++)
{
  if($ARGV[$i] =~ /^-n$/)
  {
    if(defined $ARGV[$i+1])
    {
      $name =  $ARGV[$i+1];
      $i++;
    }
    else
    {
      help();
      last;
    }
  }
  elsif($ARGV[$i] =~ /^-e$/)
  {
    if(defined $ARGV[$i+1])
    {
      $type =  $ARGV[$i+1];
      $i++;
    }
    else
    {
      help();
      last;
    }
  }
}
 
if($type ne "null" and $name ne "null")
{
  daterename($type,$name);
}
else
{
  help();
}

Zurück zum Blog