但是问题是这样的当迭代函数copydir运行到第一个目录下的第二个目录if(-d $a)这个-d竟然把一个目录判断成了文件。这个到底是则么回事,我到底哪里写错了呀
测试目录为在E:\\项目补丁\\perl脚本\\目录操作\\1 下面建两个目录,在第一个目录下再建两个目录,程序遍历到第二个目录时就把这个目录看成了文件...
use strict;
use File::Copy;
my $source_dir = "E:\\项目补丁\\perl脚本\\目录操作\\1";
my $tar_dir = "E:\\项目补丁\\perl脚本\\目录操作\\abc123";
my @one_level;
my $count;
chdir $source_dir;
@one_level = <*>;
for $a (@one_level){
chdir $source_dir;
print "one_level.---$a\n";
©dir($a);
}
print "copy files total are ->$count<- \n";
<>;
sub copydir
{
my $up_dir = shift @_;
chdir $up_dir;
my @mydir = <*>;
for $a (@mydir){
print "a = --$a\n";
if (-d $a){
print "dir_path:$a\n";
#mkdir "$tar_dir\\$a";
©dir($a);
#print "a1 = --$a\n";
}else{
#copy("$a","$tar_dir\\$a");
print "file:$a\n";
#print "a2 = --$a\n";
}
}
}
-------------------------
Double行动:
原帖分数:40
加分:40
2 个解决方案
#1
因为你在用-d对第二个目录进行判断的时候,“当前目录”已经发生改变,并不是真正的当前目录。
假如目录结构是这样的:
---dir1
---dir2
---dir3
---dir4
当你对dir4进行-d判断时,实际的当前目录是...\dir2\dir3,而不是..\dir2
可以这样修改:
假如目录结构是这样的:
---dir1
---dir2
---dir3
---dir4
当你对dir4进行-d判断时,实际的当前目录是...\dir2\dir3,而不是..\dir2
可以这样修改:
use strict;
use File::Copy;
use Cwd; #####
my $source_dir = "E:\\项目补丁\\perl脚本\\目录操作\\1";
my $tar_dir = "E:\\项目补丁\\perl脚本\\目录操作\\abc123";
my @one_level;
my $count;
chdir $source_dir;
@one_level = <*>;
for $a (@one_level){
chdir $source_dir;
print "one_level.---$a\n";
©dir($a);
}
print "copy files total are ->$count<- \n";
<>;
sub copydir
{
my $up_dir = shift @_;
my $curdir;
chdir $up_dir;
my @mydir = <*>;
for $a (@mydir){
print "a = --$a\n";
if (-d $a){
$curdir=getcwd; ####
print "dir_path:$a\n";
#mkdir "$tar_dir\\$a";
©dir($a);
chdir $curdir; ####
#print "a1 = --$a\n";
}else{
#copy("$a","$tar_dir\\$a");
print "file:$a\n";
#print "a2 = --$a\n";
}
}
}
#2
刚刚接触perl,多谢指教!加了这几段代码后正常了
#1
因为你在用-d对第二个目录进行判断的时候,“当前目录”已经发生改变,并不是真正的当前目录。
假如目录结构是这样的:
---dir1
---dir2
---dir3
---dir4
当你对dir4进行-d判断时,实际的当前目录是...\dir2\dir3,而不是..\dir2
可以这样修改:
假如目录结构是这样的:
---dir1
---dir2
---dir3
---dir4
当你对dir4进行-d判断时,实际的当前目录是...\dir2\dir3,而不是..\dir2
可以这样修改:
use strict;
use File::Copy;
use Cwd; #####
my $source_dir = "E:\\项目补丁\\perl脚本\\目录操作\\1";
my $tar_dir = "E:\\项目补丁\\perl脚本\\目录操作\\abc123";
my @one_level;
my $count;
chdir $source_dir;
@one_level = <*>;
for $a (@one_level){
chdir $source_dir;
print "one_level.---$a\n";
©dir($a);
}
print "copy files total are ->$count<- \n";
<>;
sub copydir
{
my $up_dir = shift @_;
my $curdir;
chdir $up_dir;
my @mydir = <*>;
for $a (@mydir){
print "a = --$a\n";
if (-d $a){
$curdir=getcwd; ####
print "dir_path:$a\n";
#mkdir "$tar_dir\\$a";
©dir($a);
chdir $curdir; ####
#print "a1 = --$a\n";
}else{
#copy("$a","$tar_dir\\$a");
print "file:$a\n";
#print "a2 = --$a\n";
}
}
}
#2
刚刚接触perl,多谢指教!加了这几段代码后正常了