
[英]how to copy the files form one folder to another with different extension with perl
[英]How to Perl script to move files with specific extension from one folder to another and rename the moved files
我有2个文件夹DIR1 DIR2,我只需要将扩展名为“ .csv”的文件仅从dir1移动到dir2
并使用dir2中的时间戳重命名这些文件复制的文件
$dirname = "\\dir1\\"
$dirname2= "\\dir2\\";
$filterstring=".csv";
opendir ( DIR, $dirname ) || die "Error in opening dir $dirname\n";
foreach my $filename (readdir(DIR))
{
if ($filename =~ m/$filterstring/) {
$cfile=$dirname.$filename;
print "\n moving $cfile from $dirname to $dirname2 \n";
move($cfile,$dirname2);
}}
closedir(DIR);
我开发的上述代码移动了扩展名为“ .csv”的文件以及文件名为“ abc_csv_uv.txt”的文件。我该如何解决此问题,然后重命名已移动的文件...请咨询..需要帮助
use strict;
use File::Copy;
use File::stat;
use POSIX qw(strftime);
my $dirname = "\\dir1\\";
my $dirname2 = "\\dir2\\";
my $filterstring = "\\.csv\$";
opendir ( DIR, $dirname ) || die "Error in opening dir $dirname\n";
foreach my $filename (readdir(DIR)) {
next if not $filename =~ m/$filterstring/;
my $old_file = $dirname . $filename;
my $new_file = $dirname2 . $filename . '.' . strftime("%Y%m%dT%H%M%S", localtime(stat($old_file)->mtime));
print "Moving $old_file to $new_file\n";
move($old_file, $new_file);
}
closedir(DIR);
1;
将过滤器更改为\\\\.csv$
.
在正则表达式中表示任何字符,并且$强制将其放在字符串末尾。
我认为这是在Windows中完成的。 否则你可以做
mv dir1/*.csv dir2
您可以类似的方式使用perl的glob
for my $file (glob "dir1/*.csv") {
move $file, "dir2" or die $!;
}
注意:未经测试,因为我在移动设备上。
您可能希望使用File :: Copy模块。 有关更多信息,请参阅有关移动的文档。
这是另一个选择:
foreach my $filename (grep /\Q$filterstring\E$/, readdir(DIR)){
grep
将仅允许您的.csv文件从读取的目录传递。 接下来,删除条件:
if ($filename =~ m/$filterstring/) {
因为grep
将处理文件名过滤。
use strict;
use File::Copy;
use File::stat;
use POSIX qw(strftime);
my $dirname = "\\dir\\";
my $dirname2 = "\\dir1\\";
my $filterstring = "\\.csv";
opendir ( DIR, $dirname ) || die "Error in opening dir $dirname\n";
foreach my $filename (readdir(DIR)) {
if ($filename =~ m/$filterstring/)
my $len=length($filename);
my $v=$len-4;
my $str=substr $filename, 0, $v;
my $old_file = $dirname . $filename;
my $new_file = $dirname2 . $str . '_' . strftime("%Y%m%d", localtime(stat($old_file)->mtime)).'.'.'csv';
print " $new_file\n";
copy($old_file, $new_file);
}
} closedir(DIR);
i modfied and This works!!
thanks all...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.