#!/usr/bin/perl -w
use strict;
use File::Copy;
use File::Spec;
my($chptr, $base_path, $new, $dir);
$dir = "Full Metal Alchemist"; #Some dir
opendir(FMA, $dir) or die "Can't open FMA dir";
while($chptr = readdir FMA){
$base_path = File::Spec->rel2abs($dir).'/'; #find absolute path of $fir
if($chptr =~ m(Chapter\w*\d*)){ #some regex to avoid the .. and . dirs
$new = join(" 0", split(/\W/, $chptr)); #modify said sub directory
rename "$base_path$chptr", "$base_path$new" ? print "Renames $base_path$chptr to
$base_path$new\n" : die "rename failed $!";
}
}
closedir FMA;
最初,我的脚本只使用相对路径来执行move op,但由于某种原因,这会使子目录不受影响。我的下一步是走向绝对路径,但无济于事。我只是在学习Perl所以我觉得我犯了一个简单的错误。我哪里出错了? TIA
答案 0 :(得分:1)
您可以按如下方式排除.
和..
:
if ( $child ne '.' and $child ne '..' ) { ... }
一些一般性评论:
opendir
,readdir
,rename
和File::Spec
可以启动。但是有一种更简单的方法:看一下Path::Class
module,特别是它的两个子类。它们在File::Spec
(以及更多)上提供精心设计的抽象层,它基本上是文件系统操作的一站式服务。