为什么这个perl代码没有注意到在执行期间添加到目录的新文件?

时间:2018-01-22 10:37:03

标签: perl

我需要编写一个Perl程序,其中有一堆写入本地磁盘的文件。我必须监视它们,并且在任何文件不再增加之后,使用SFTP将其传输到另一个位置。

这样的事情:

  1. 逐个检查所有要删除文件夹的文件

  2. 如果文件仍在增长,请转到下一个文件

  3. 如果文件不再增长,请使用SFTP将其移动到另一个位置

  4. 循环回到数字1.

  5. 这是我在将其转移到Linux之前首先尝试在Win中工作的原因。问题是,这只运行一次,而不是循环 - >如果在运行时添加新文件,那些文件是不可触摸的......

    `

     while (1) {
    
      while (my $filename = readdir(DIR) ) {
       print $filename , "\n";
       my $size1 = -s $filename;
       print "$size1\n";
       sleep 2;
       my $size2 = -s $filename;
       print "$size2\n";
    
          if ($size1 == $size2) {
          move($filename,"c:/temp/perl/out");
     }
    
    }
    

1 个答案:

答案 0 :(得分:0)

readdir()仅遍历使用opendir()调用打开目录时存在的文件。你需要在外部while循环中调用opendir()。来自perlmonks的代码示例:

#!/usr/bin/perl
use strict;
use warnings;

while (opendir my $dirh, "/somewhere/else")
{
    while (my $file = readdir $dirh)
    {
        print "$file\n";
    }
    sleep 1;
}