2016-06-15 17 views
5

Dies ist nur ein kleines Skript, das ich auf Endlosschleife ausführen, um ein Verzeichnis zu überprüfen und jede Datei zu verschieben, die dort ist. Dieser Code funktioniert und ich führe ihn in den Hintergrundprozessen. Aber aus irgendeinem Grund bekomme ich den folgenden Fehler: '/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: Datei von einem Ort zu einem anderen kopieren

eine Idee, warum es mir sagt, dass es identisch ist, obwohl die Wege unterschiedlich sind?

Vielen Dank

Skript unter

#!/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

Gründe, warum Sie dies in Perl und nicht in einem Shell-Skript tun? – Kusalananda

+2

kein wirklicher Grund, dies funktioniert nur Server-Seite und ich hatte ein kleines bisschen Perl exp –

Antwort

8

Sie müssen die speziellen .. und . Einträge aus @files auszufiltern.

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

    } 
} 

} 

Die Nachricht, die Sie sehen, ist korrekt. Beide Pfade werden wegen des .. in demselben Verzeichnis aufgelöst; beide werden auf /home/srvc_ibdcoe_pcdev/Niall_Test

.. verweist auf das übergeordnete Verzeichnis des Verzeichnisses.

Verwandte Themen