将文件从一个位置复制到另一个位置

问题描述 投票:0回答:1

这只是一个小脚本,我在连续循环中运行以检查目录并移动其中的每个文件。该代码有效,并且我正在后台进程中运行它。但是,由于某种原因,我收到以下错误:

'/home/srvc_ibdcoe_pcdev/Niall_Test/new_dir/..' and '/home/srvc_ibdcoe_pcdev/Niall_Test/perl_files/..' 
are identical (not copied) at move2.pl line 27

为什么它告诉我它是相同的,即使路径不同?

下面的脚本

#!/usr/bin/perl
use diagnostics;
use strict;
use warnings;

use File::Copy;

my $poll_cycle = 10;
my $dest_dir = "/home/srvc_ibdcoe_pcdev/Niall_Test/perl_files";

while (1) {
    sleep $poll_cycle;

    my $dirname = '/home/srvc_ibdcoe_pcdev/Niall_Test/new_dir';

    opendir my $dh, $dirname
        or die "Can't open directory '$dirname' for reading: $!";

    my @files = readdir $dh;
    closedir $dh;

    if ( grep( !/^[.][.]?$/, @files ) > 0 ) {
        print "Dir is not empty\n";

        foreach my $target (@files) {
            # Move file
            move("$dirname/$target", "$dest_dir/$target");

    }
}

}
perl move
1个回答
8
投票

您需要从

..
中过滤掉特殊的
.
@files
条目。

#!/usr/bin/perl
use diagnostics;
use strict;
use warnings;

use File::Copy;

my $poll_cycle = 10;
my $dest_dir = "/home/srvc_ibdcoe_pcdev/Niall_Test/perl_files";

while (1) {
    sleep $poll_cycle;

    my $dirname = '/home/srvc_ibdcoe_pcdev/Niall_Test/new_dir';

    opendir my $dh, $dirname
        or die "Can't open directory '$dirname' for reading: $!";

    my @files = grep !/^[.][.]?$/, readdir $dh;
    closedir $dh;

    if (@files) {
        print "Dir is not empty\n";

        foreach my $target (@files) {
            # Move file
            move("$dirname/$target", "$dest_dir/$target");

    }
}

}

您看到的消息是正确的。由于

..
,两个路径都解析为同一目录;两人都决心
/home/srvc_ibdcoe_pcdev/Niall_Test

..
指目录的父目录。

© www.soinside.com 2019 - 2024. All rights reserved.