我一直在尝试创建一个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
函数,但不要认为效率很高。
答案 0 :(得分:0)
我想出了一个以下解决方案,它似乎对我有用。
我一直在监视文件夹中的任何更改(使用iNotify2)并单独跟踪它。在预定义的时间间隔后,我使用单独的进程为新创建的子文件夹执行我的任务。