perl - 通过 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"); }
}
}
解决方案
如果你真的在使用,Net::SFTP::Foreign
那么这条线是错误的。
@rls = $sftp->ls('.',wanted=> qr/$file.*/ );
文档说该ls
方法返回对哈希数组的引用
推荐阅读
- functional-programming - 重载函数的 Hindley-Milner 类型推断
- javascript - 这段代码有什么问题?为什么它没有按我希望的方式工作..?
- http - 如何每5分钟自动重复一次我在fiddler中编写的http post请求?
- r - 如何使用 read.csv2.sql 在不解压缩的情况下读取 zip 文件?
- python - 通过 cx_Freeze 将 py 转换为 exe,启动时出现回溯错误
- python - 如何创建每行的列集不同的 Pandas 数据框?
- pandas - 在其他行的 31 天内有效地查找行
- python - 在 for 循环中连接 numpy 数组
- material-ui - 将 jss 类名添加到 jsx 元素数组
- python - 使用 Pandas 读取 excel 文件时跳过特定行