perl - 监视文件夹并等待更改完成

时间:2014-05-07 11:33:48

标签: perl

我一直在尝试创建一个perl脚本来监视创建的任何新子文件夹的文件夹,并且必须将其复制到新位置。

直到现在我能够提出以下代码。我可以监视和捕获新创建的文件夹,但我不知道如何等待,直到在这个新创建的文件夹下创建所有子文件夹/文件。

我目前的代码是

    use warnings;
use strict;
use Linux::Inotify2;
use File::Copy::Recursive qw(dircopy);

   my $target = "/home/Interface/tmp";

   print STDERR "Watching $target...\n";

  my $in2 = Linux::Inotify2->new();
  die "Inotify2: $!" if (! defined $in2 );

   $in2->watch ($target, IN_CREATE) or die "watch: $!";

#### Need to do Something here to wait untill IN_CREATE EVENT finishes fully#######

   while (1) {
     foreach my $watchdog ($in2->read()) {
          print "$watchdog->{name}\n ";
          caputure_event($watchdog);
      }
   }

sub caputure_event
{
   my ($itemlist) = @_;
   my $itemlistPath = $itemlist->fullname;
   my $itemlistID  = $itemlist->{name};


   copyfile($itemlistPath,$itemlistID);
   $itemlistPath = "";
}  


sub copyfile
{

   my ($sourcedir,$itemlistName) = @_;
   my $targetparentdir = "/home/Interface/Input";
   my $targetdir = "$targetparentdir/$itemlistName";
   dircopy("$sourcedir", "$targetdir");

}

我的问题是在新目录下创建所有文件之前执行copyfile函数。我想获得专家的想法来克服这个问题。我可以使用sleep函数,但不要认为效率很高。

1 个答案:

答案 0 :(得分:0)

我想出了一个以下解决方案,它似乎对我有用。

我一直在监视文件夹中的任何更改(使用iNotify2)并单独跟踪它。在预定义的时间间隔后,我使用单独的进程为新创建的子文件夹执行我的任务。