in reply to Optimize file renaming.
What I use on Unix:
However, if you want this to work cleanly on Windows, too, I'd just add a line near the top like this: @ARGV = map { glob $_ } @ARGV) and then you could run this as perl renum e:/perl/comics/*.png - it would figure out that the largest number is 3 digits long, and renam all of them to be 3 digits long. Slightly more generic.$ cat renum #! /usr/bin/perl -w use strict; my $len = 0; if ($ARGV[0] =~ /^\d+$/) { $len = shift; } elsif ($ARGV[$#ARGV] =~ /^\d+$/) { $len = pop; } else { foreach my $f (@ARGV) { $f =~ /(\d+)(\D*)$/; $len = length $1 if length $1 > $len; } } unless ($len) { print "No length given/discovered\n"; exit 1; } foreach my $f (@ARGV) { (my $newf = $f) =~ s/(\d+)(\D*)$/sprintf "%0${len}d%s", $1, $2/e; if ($newf ne $f) { print "$f -> $newf\n"; rename $f, $newf; } }
|
|---|