Recursively renames all files in a directory tree with sequential zero-padded numbers (0000001.ext, 0000002.ext, etc.). Preserves file extensions and directory structure. Useful for organizing large collections of files with consistent naming.

Usage:

perl rename.pl <directory>

Renames all files recursively with 7-digit zero-padded sequential numbers while preserving extensions.

Source Code

#!/usr/bin/perl
#
sub tree {
 my(@filenames);
 my($root) = $_[0];
 my($i) = 0;
 print "\nexploring $root ";
 opendir ROOT, $root;
 my(@filelist) = readdir ROOT;
 closedir ROOT;
 foreach $name (@filelist) {
  if ($name ne '.' and $name ne '..') {
   $name = $root . "\\" . $name;
   if (-f $name) {
    @filenames = (@filenames, $name);
    $i++;
    print "."  if ($i % 100 == 0);
   }
   @filenames = (@filenames, tree($name)) if (-d $name);
  }
 }
 print "\n$root: $i files...\n";
 return @filenames;
}

@filenames = tree($ARGV[0]) or die "indir fail...";

$i = 1;

foreach $filename (@filenames) {
 $filename =~ /^(.*)\\(.*)\.(.*)$/;
    $path = $1;
    $name = $2;
    $ext = $3;
    $counter = sprintf('%07d', $i);
 rename "$filename", "$path\\$counter.$ext"  or print "rename $filename to $path\\$counter.$ext fail...";
 $i++;
}
Loading tracks SoundCloud