[EMAIL PROTECTED] wrote:
Hi,

Hello,

I want to rename all the files in a directory with filenames starting 1.jpg to n.jpg.
Why this code does not rename the files?


opendir(DIR, "/tmp") or die "can not open dir: $!\n";
my @files = grep {/.jpg/ } readdir(DIR);
closedir(DIR);

my $count = 1;

foreach (@files){
print "@files\n";  # works: prints all the files
    my $new = $_;
    $new =~ s/(.*)(.jpg)/$count$2/;

rename($_, $new) or die "can not rename file: $!\n";
print "$_ renamed to $new\n";
$count++;
}

You want something like this:

my $dir = '/tmp';

opendir DIR, $dir or die "Cannot open $dir: $!";
my @files = map "$dir/$_", grep /\.jpg$/, readdir DIR;
closedir DIR;

my $count = 1;

for my $file ( @files ) {
    print "$file\n";
    my $new = "$dir/" . $count++ . '.jpg';
    if ( -e $new ) {
        print "$new already exists.\n";
        next;
        }
    rename $file, $new or warn "Cannot rename $file to $new: $!";
    print "$file renamed to $new\n";
    }

__END__



John
--
use Perl;
program
fulfillment

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>




Reply via email to