2016-06-15 17 views
5

これは、ディレクトリをチェックしてそこにあるすべてのファイルを移動する連続ループに実行している小さなスクリプトです。このコードは動作し、バックグラウンドプロセスで実行しています。しかし何らかの理由で私は次のエラーが発生しています:'/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 27Perl:ある場所から別の場所にファイルをコピーする

パスが違っても私には同じ理由が分かりますか?

感謝

スクリプト

#!/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"); 

    } 
} 

} 
+0

シェルスクリプトではなくPerlでこれを行う理由は何ですか? – Kusalananda

+2

本当の理由はありませんが、これはサーバー側で動作していて、私はperl exp –

答えて

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

..は、ディレクトリの親ディレクトリを参照します。

関連する問題