将超过三小时的文件移动到存档文件夹而不覆盖现有文件

时间:2018-03-28 10:44:09

标签: 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;

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;

1 个答案:

答案 0 :(得分: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
);
相关问题