Perl里怎么把一个目录下的所有子目录和文件移动到另一个目录去

时间:2022-05-30 11:33:48
如题。
File::Copy::move不好使
system("move ....") 在Windows下也不好使

哪个给个办法,越简单越好。

11 个解决方案

#1


你试一下rename

#2


支持楼上的,你试一下,不过rename好像不能在不同磁盘间移动

#3


汗,这个还真挺郁闷……
要不在windows上装个mv吧?

#4


帮顶, 

顺便借宝地一用,放分100,各位前辈去帮我看看哈。
http://topic.csdn.net/u/20080829/15/cf342255-bc48-450b-888c-e50f549feb69.html?seed=1460322691 

欢迎去抢哈。

#5


Windows下使用 xcopy 
如,拷贝source目录下的所有子目录及文件到destination目录下:

#! perl

my $source_dir     = 'F:\Perl\source\*';
my $destination_dir = 'F:\Perl\destination';

system("xcopy /E $current_dir $destination_dir");

#6


给你个万能的,就是麻烦点,经过我的测试了
#!/usr/bin/perl -w
use strict;
my $sourcedir = 'D:\test1';#$sourcedir你要移动的目录
my $new_dir = 'D:\test2';#$new_dir是目标文件夹
my $filelist = "D:\\filelist.log";#$filelist保存你要移动的所有文件列表
my $currentdir = "D:\\"; #$currentdir你的脚本所在的目录
chdir($sourcedir);
system ("dir /b /s /a:-D >$filelist");
chdir ($currentdir);
open THELIST,$filelist;
while(<THELIST>){
chomp;
my $thelist = $_;
my $src_file =$thelist;
print "start\n";
if ($src_file =~ /(.*)\\(.+)\..*/g) {
my $src_path = $1;
print "src1:$src_path\n";
print "$sourcedir and $new_dir \n";
$src_path =~ s/D:\\test1/$new_dir/;#D:\\test1即$sourcedir你要移动的目录,但此处不能用变量$sourcedir
print "src2:$src_path\n";
if(! -e $src_path){
print "make\n";
system("mkdir $src_path");
}
system("move $thelist $src_path");
print "move\n";
}
}
close(THELIST);

#7


引用 5 楼 will2ni 的回复:
Windows下使用 xcopy 
如,拷贝source目录下的所有子目录及文件到destination目录下: 

Perl code
#! perl

my $source_dir        = 'F:\Perl\source\*';
my $destination_dir = 'F:\Perl\destination';

system("xcopy /E $current_dir $destination_dir");

这个只能copy,不能move,达不到楼主的要求啊

#8


引用 7 楼 ecitnet 的回复:
引用 5 楼 will2ni 的回复:
Windows下使用 xcopy
如,拷贝source目录下的所有子目录及文件到destination目录下:

Perl code
#! perl

my $source_dir        = 'F:\Perl\source\*';
my $destination_dir = 'F:\Perl\destination';

system("xcopy /E $current_dir $destination_dir");

这个只能copy,不能move,达不到楼主的要求啊

恩 
那就再加上个del /q $source_dir

#9


复制再删除来实现move,效率太低了。

#10


robocopy 有一个选项copy完成之后可以删除源地址的文件

#11


感谢大家,这个帖发了之后就忘掉了。现在才来结分,真对不起!

#1


你试一下rename

#2


支持楼上的,你试一下,不过rename好像不能在不同磁盘间移动

#3


汗,这个还真挺郁闷……
要不在windows上装个mv吧?

#4


帮顶, 

顺便借宝地一用,放分100,各位前辈去帮我看看哈。
http://topic.csdn.net/u/20080829/15/cf342255-bc48-450b-888c-e50f549feb69.html?seed=1460322691 

欢迎去抢哈。

#5


Windows下使用 xcopy 
如,拷贝source目录下的所有子目录及文件到destination目录下:

#! perl

my $source_dir     = 'F:\Perl\source\*';
my $destination_dir = 'F:\Perl\destination';

system("xcopy /E $current_dir $destination_dir");

#6


给你个万能的,就是麻烦点,经过我的测试了
#!/usr/bin/perl -w
use strict;
my $sourcedir = 'D:\test1';#$sourcedir你要移动的目录
my $new_dir = 'D:\test2';#$new_dir是目标文件夹
my $filelist = "D:\\filelist.log";#$filelist保存你要移动的所有文件列表
my $currentdir = "D:\\"; #$currentdir你的脚本所在的目录
chdir($sourcedir);
system ("dir /b /s /a:-D >$filelist");
chdir ($currentdir);
open THELIST,$filelist;
while(<THELIST>){
chomp;
my $thelist = $_;
my $src_file =$thelist;
print "start\n";
if ($src_file =~ /(.*)\\(.+)\..*/g) {
my $src_path = $1;
print "src1:$src_path\n";
print "$sourcedir and $new_dir \n";
$src_path =~ s/D:\\test1/$new_dir/;#D:\\test1即$sourcedir你要移动的目录,但此处不能用变量$sourcedir
print "src2:$src_path\n";
if(! -e $src_path){
print "make\n";
system("mkdir $src_path");
}
system("move $thelist $src_path");
print "move\n";
}
}
close(THELIST);

#7


引用 5 楼 will2ni 的回复:
Windows下使用 xcopy 
如,拷贝source目录下的所有子目录及文件到destination目录下: 

Perl code
#! perl

my $source_dir        = 'F:\Perl\source\*';
my $destination_dir = 'F:\Perl\destination';

system("xcopy /E $current_dir $destination_dir");

这个只能copy,不能move,达不到楼主的要求啊

#8


引用 7 楼 ecitnet 的回复:
引用 5 楼 will2ni 的回复:
Windows下使用 xcopy
如,拷贝source目录下的所有子目录及文件到destination目录下:

Perl code
#! perl

my $source_dir        = 'F:\Perl\source\*';
my $destination_dir = 'F:\Perl\destination';

system("xcopy /E $current_dir $destination_dir");

这个只能copy,不能move,达不到楼主的要求啊

恩 
那就再加上个del /q $source_dir

#9


复制再删除来实现move,效率太低了。

#10


robocopy 有一个选项copy完成之后可以删除源地址的文件

#11


感谢大家,这个帖发了之后就忘掉了。现在才来结分,真对不起!