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那么请看