我需要编写一个Perl程序,其中有一堆写入本地磁盘的文件。我必须监视它们,并且在任何文件不再增加之后,使用SFTP将其传输到另一个位置。
这样的事情:
逐个检查所有要删除文件夹的文件
如果文件仍在增长,请转到下一个文件
如果文件不再增长,请使用SFTP将其移动到另一个位置
循环回到数字1.
这是我在将其转移到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");
}
}
答案 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;
}