用perl重命名文件

时间:2015-11-14 03:22:38

标签: perl

我对perl很新,我想重命名一组文件,使它们是小写而不是大写(所以来自SBC005.wav - > sbc005.wav)。

use strict;
use warnings;

my $dirnam = "/Users/.../SoundFiles";

opendir(DIR, $dirnam) or die "Cannot open directory: $!";
my @files = readdir(DIR);

foreach my $oldfile (@files) {
    my $newfile = lc($oldfile);
    #print $newfile;
    #print $oldfile;
    rename $oldfile, $newfile or die "Cannot rename file: $!";
    }

closedir(DIR);

我检查了变量是否与注释掉的print语句一致,但是当我运行程序时,我收到一条消息,说“"无法重命名文件:rename.pl第13行的参数无效。”#34 ;我不确定我在这里做错了什么。

非常感谢你!

编辑:

非常感谢你的答案!我发现使用glob的代码也有效,但下面的代码效果更好,因为它不必与声音文件在同一目录中(如glob代码那样)

use strict;
use warnings;

my @files = glob("*.wav");

foreach my $oldfile (@files) {
    my $newfile = lc($oldfile);
    #print $newfile;
    #print $oldfile;
    rename $oldfile, $newfile or die "Cannot rename file: $!";
    }

exit 0;

2 个答案:

答案 0 :(得分:4)

试试这个。你忘记在重命名时添加目录路径。

use strict;
use warnings;

my $dirnam = "/Users/.../SoundFiles";

opendir(DIR, $dirnam) or die "Cannot open directory: $!";
my @files = readdir(DIR);

foreach my $oldfile (@files) 
{
    unless($oldfile  eq "." || $oldfile eq ".." )
    {           

        my $newfile = lc($oldfile);

        rename "$dirnam/$oldfile", "$dirnam/$newfile" or die "Cannot rename file: $!";
    }

}

答案 1 :(得分:-3)

尝试File :: Copy。它有一个MOVE()方法,如果可能,重命名该文件。从文档(不运行):

use File::Copy;
move("/dev1/sourcefile","/dev2/destinationfile");