1

我需要查看目录下的文件。我在 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. if 语句继续打印 'files available' 。继续无限循环,它不再监视文件。即使我对文件进行操作,我也不知道如何让它再次查找文件。2.脚本不在后台运行。

非常感谢任何帮助。提前谢谢。!

4

1 回答 1

0

假设您在 Linux 下运行,请使用 Linux::Inotify2 ...

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 挂载)

于 2017-04-19T16:59:51.163 回答