2016-06-15 5 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

.. относится к родительскому каталогу каталога.

 Смежные вопросы

  • Нет связанных вопросов^_^