首页 > 解决方案 > 通过 ls() 使用 Perl::SFTP::Foreign 计数文件

问题描述

使用 Perl::SFTP::Foreign 我试图计算具有特定文件句柄的文件数。

结果的用法是在代码稍后的重命名命令期间对文件进行增量编号,以便第一个 zip 文件重命名为 filename.zip.bak,然后是 filename.zip.bak2,然后是 filename.zip.bak3

my $file = "filename.zip"
$reName  = ".bak";

@rls = $sftp->ls('.', wanted => qr/$file.*/ );    
$rls_size = @rls;
$fileReName = $file . $reName;


if ( $rls_size > 1 ) {
    $fileReName = $fileReName . $rls_size ;
}

unless ( $sftp->rename($file, $fileReName) ) {
    Print "Error Renaming $file to $fileReName. $@ $!\n");
}

我很抱歉格式化。代码不断返回数组中的一个条目,以便分配的数字不会超过 1,即使在计数中通常会选择 2 个或更多。想要的语句和给定的正则表达式期望的格式有什么问题吗?

这是用于执行相同功能的旧 Net::FTP 代码:

sub process_file($)
{   my $file = $_[0];

    if($reName)
    {   
        @rls = $ftp->ls($file."*");
        $rls_size = @rls;
        $fileReName = $file . $reName;
        if($rls_size > 1){  $fileReName = $fileReName . $rls_size;  }

        unless ($ftp->rename($file,$fileReName))
        {   PrintLog (0, "Error Renaming $file to $fileReName. $@ $!\n");   
            $error =101;
            exit 101;
        }else{  PrintLog (7, "Renamed File $file to $fileReName.\n");   }
    }
    else{
        unless ($ftp->delete($file))
        {   PrintLog (0, "Error deleting $file. $@ $!\n");  
            $error =101;    
            exit 101;
        }else{  PrintLog (7, "Deleted $file.\n");   }
    }

}

标签: perlsftp

解决方案


如果你真的在使用,Net::SFTP::Foreign那么这条线是错误的。

@rls = $sftp->ls('.',wanted=> qr/$file.*/ );    

文档说该ls方法返回对哈希数组的引用


推荐阅读