我无法使用perl在linux系统中重命名文件

时间:2015-04-30 12:44:47

标签: perl

我只是Perl的初学者。我尝试使用以下脚本重命名文件或目录,但它不重命名文件。请帮我确定问题所在。

我正在使用Perl版本5.8.4

#!/usr/bin/perl
use strict;
use warnings;

use File::Copy;
my $dir="/home/hari/perl-s/abc/";
opendir (DIR, $dir);
my @fileList = readdir DIR;

foreach (@fileList){
    next if -d;
    my $oldname = $_;
    print "Newfile after assigning: $_ \n";
    s/(^[0-9])(.)//;
    print "Newfile: $_ \n";
    print "oldname: $oldname \n";
    rename ($oldname,$_);
}

1 个答案:

答案 0 :(得分:2)

readdir的返回值只是文件名;它们不包括提供给opendir的路径。您通常必须手动包含它。

opendir (DIR, $dir);
my @fileList = readdir DIR;

foreach (@fileList){
    # $_ is just "filename"
    $_ = "$dir/$_";   # now $_ is "/home/hari/perl-s/abc/$filename"
    next if -d;
    ...
}

在Perl中有不止一种方法可以做。在目录中获取文件集的另一种方法是使用glob函数。 glob的一个优点是,您可以以这样的方式使用它,以便它返回带有完整路径的文件名,因此有时glob优于opendir/readdir/closedir习语:< / p>

my @filelist = glob("$dir/*");
foreach (@filelist) {
    # $_ is "/home/hari/perl-s/abc/filename"
    ...
}