我对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;
答案 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");