Perl 将三小时以上的文件移动到存档文件夹,而不覆盖现有文件
下面的脚本将修改时间超过三小时的文件从Perl 将三小时以上的文件移动到存档文件夹,而不覆盖现有文件,perl,Perl,下面的脚本将修改时间超过三小时的文件从/tmp/test1文件夹移动到/data/ARCHIVE文件夹 问题是,如果ARCHIVE文件夹已经有一个与test1文件夹同名的文件,它将覆盖它们,这是不需要的 #!/usr/bin/perl use strict; use warnings; use File::Find; use File::Copy; my $dstdir = '/data/ARCHIVE/'; @ARGV = ("/tmp/test1") unless @ARGV; p
/tmp/test1
文件夹移动到/data/ARCHIVE
文件夹
问题是,如果ARCHIVE
文件夹已经有一个与test1
文件夹同名的文件,它将覆盖它们,这是不需要的
#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
use File::Copy;
my $dstdir = '/data/ARCHIVE/';
@ARGV = ("/tmp/test1") unless @ARGV;
print STDERR "Begin @ ", scalar localtime, "\n";
find(
sub {
if ( -f $_ && -M _ >= 3 / 24 ) {
print STDERR "Moving '$_'\n";
move( $File::Find::name, $dstdir ) or die "$!\n";
}
},
@ARGV
);
print STDERR "Ended @ ", scalar localtime, "\n";
1;
将历元添加到文件名。但是不要每秒运行代码超过一次
my $now = strftime( '%Y%m%d%H%M%S', localtime );
find(
sub {
if ( -f $_ && -M _ >= 3 / 24 ) {
print STDERR "Moving '$_'\n";
my $dst = "$dstdir/$_.$now";
move( $File::Find::name, $dst ) or die "$!\n";
}
},
@ARGV
);
如果存在将被覆盖的文件,您希望的行为是什么?有许多潜在的替代方案,包括不覆盖、因错误而停止、将文件写入其他文件夹、重新命名文件以避免覆盖等。数据应附加相同的文件名,或者文件名将被重命名为文件名_1,每次将文件移动到与test1文件夹同名的存档文件夹时,文件名为2。您似乎根本没有尝试为这种情况编写代码,这使我认为您只是从某个地方复制了此代码,并希望我们为您“修复”。那是不会发生的。如果你发现它不可能工作,请尽你最大的努力寻求帮助。提示:新文件将是
“$dstdir/$\”
,在您执行移动之前检查它是否存在是有意义的。好的——如果您可以尝试实现正在查看的结果,但发现无法执行,那么您可以针对遇到的问题询问特定问题。提示:您如何检查给定的文件名是否已经存在,如果您发现该文件已经存在,您如何通过添加字符来修改文件名以提供您正在寻找的命名方案?上述解决方案对我很有效。我是一个perl新手,试图理解一些东西。谢谢大家的支持。@user260834那么请看