2016-06-15 29 views
5

Questo è solo un piccolo script che sto eseguendo su ciclo continuo per controllare una directory e spostare tutti i file che ci sono. Questo codice funziona e lo sto eseguendo nei processi in background. Ma per qualche motivo mi viene il seguente errore: '/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: copia il file da una posizione all'altra

qualche idea del perché mi sta dicendo che è identico anche se i percorsi sono diversi?

Molte grazie

seguente script

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

Qualsiasi motivo lo fai in Perl piuttosto che in uno script di shell? – Kusalananda

+2

nessun motivo reale, questo è solo lato server funzionante e ho avuto un po 'di perl exp –

risposta

8

È necessario filtrare i particolari .. e . voci dal @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"); 

    } 
} 

} 

Il messaggio che vedi è corretto. Entrambi i percorsi si risolvono nella stessa directory a causa dello ..; entrambi risolvono a /home/srvc_ibdcoe_pcdev/Niall_Test

.. si riferisce alla directory padre della directory.

Problemi correlati