Sequential Rename (2003)

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++;
}