2015-01-19 3 views
1

디렉토리 아래에있는 파일을 감시해야합니다. 아래 스크립트를 perl로 코딩했습니다. 하지만 내가 원하는 것을하지 않습니다.perl을 사용하여 디렉토리에서 파일을 보 기

  1. 파일이 도착할 때마다 이동해야합니다.
  2. 그리고 나서 파일을 계속보고 있어야합니다.
  3. 스크립트는 백그라운드에서 실행되어야합니다. 문은 '파일을 사용할 수'인쇄에 대한 유지하면

    #!/usr/bin/perl 
    use warnings; 
    use File::Copy qw(move); 
    $src_dir = '/root/prasanna/dir'; 
    $tgt_dir = '/root/prasanna/dir/dir1'; 
    while (true) { 
        opendir(DIR, "/root/prasanna/dir") 
         or die "Cannot open /root/prasanna/dir: $!\n"; 
        my @Dircontent = readdir DIR; 
        close DIR; 
        my $items = @Dircontent; 
        if ($items > 2) { 
         print "files available"; 
         while ($items) { 
          print $items; 
          move $src_dir. '/' . $items, $tgt_dir . '/' . $items; 
          unlink $items; 
         } 
        } 
        else { sleep 50; } 
    } 
    

위의 코드의 문제는 1.이다. 무한 루프가 계속되면 파일을 다시 보지 않습니다. 파일에서 작업을해도 파일을 다시 찾는 법은 없습니다. 2. 스크립트가 백그라운드에서 실행되지 않습니다.

도움이 매우 감사합니다. 미리 감사드립니다.

+0

가독성을 향상시키기 위해 코드를 포맷하십시오

use Linux::Inotify2; # create an Inotify object my $Inotify = Linux::Inotify2->new() or die "Fail: $!"; # choose which operations for which you wish to be notified my $watchme = IN_CLOSE_WRITE | IN_CREATE | IN_MOVED_TO; # defined and exported $Inotify->watch('/root/prasanna/dir', $watchme, \&watcher) or die "Fail: $!"; while (1) { $Inotify->poll; } sub watcher { # do something here } 

참고가 로컬 파일 시스템 (즉, 어떤 NFS 마운트)를 모니터링 할 수 있습니다 ... 리눅스 :: Inotify2를 사용합니다. – Joeblade

+0

방금 ​​코드를 다시 포맷하거나 수정하려고 시도했습니다. 그것은 a) 불완전하고 b) 경고를 발행합니다. 경고를 수정하고, '엄격한 사용'을 설정하고 코드를 형식화하면 더 나은 답변을 얻을 수 있습니다. – Sobrique

+0

@joeblade 다른 줄에 코드를 삽입하는 방식으로 편집 할 수 없습니다. 그러면 오류가 표시됩니다. – vds

답변

0

리눅스에서 실행되는 추정,