我有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” 我如何纠正这个问题,然后重命名移动的文件...请告知..需要帮助
答案 0 :(得分:4)
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;
答案 1 :(得分:2)
将过滤条件更改为\\.csv$
.
表示任何字符和$强制它在字符串的末尾。
答案 2 :(得分:2)
我认为这是在Windows中完成的。否则你可以做到
mv dir1/*.csv dir2
您可以以类似的方式使用perl的glob
for my $file (glob "dir1/*.csv") {
move $file, "dir2" or die $!;
}
注意:未经测试,因为我在移动设备上。
您可能希望使用File :: Copy模块。有关详细信息,请参阅移动文档。
答案 3 :(得分:1)
这是另一种选择:
foreach my $filename (grep /\Q$filterstring\E$/, readdir(DIR)){
grep
只允许.csv文件从读取的目录传递。接下来,删除条件:
if ($filename =~ m/$filterstring/) {
因为grep
将处理文件名过滤。
答案 4 :(得分:0)
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...