perl - 如何使用 perl Net::SFTP::Foreign 获取与模式匹配的文件

标签 perl download sftp

这是我第一次提交问题,我希望有人能帮助我解决这个问题。我以前从未使用过 Perl,因此也非常感谢任何其他提示。

假设我有一个带有 NET::FTP 的 Perl 脚本,它与调用脚本时可以指定的模式相匹配。例如:

perl ftp.pl '*.txt'

为了保持绝对简单,以下是在建立与 FTP 服务器的连接后我将使用 NET::FTP 执行的操作。

$Pattern = '*.*';
$ftp->cwd($FolderAtHost);
my @Files = $ftp->ls($Pattern);
foreach my $File (@Files)
{
     ...
}

现在我想用 NET::SFTP 做同样的事情。但 ls 方法完全不同。它返回对 Array 而不是数组的引用,这没什么大不了的。 但我找不到检查特定文件模式的方法,例如: *.*

我知道 sftp 包的 ls 方法中有一个 wanted => 选项,但它需要 RegEx 而不是文件模式。

sftp->setcwd($FolderAtHost)
my @FilesRef = $sftp->ls(names_only => 1, wanted => qr/.../);
foreach my $File (@$FilesRef)
{
    ...
}

我是否必须先编写一个文件模式到正则表达式转换器,还是有更简单的方法来实现此目的? 也许与 foreach 中的文件名匹配?

最佳答案

Net::SFTP::Foreign 提供 glob方法就是为了这个:

sftp->setcwd($folder_at_host);
my $files = $sftp->glob('*.jpg');
for my $file (@$files) {
    ...
}

关于perl - 如何使用 perl Net::SFTP::Foreign 获取与模式匹配的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59073555/

相关文章:

perl - 文件句柄在 Perl 中无法正常工作

mysql - 用于登录数据库并进行简单查询的 Perl 模块?

string - 删除属于其他行的子串的行

Ruby - 在下载完成之前保存文件部分

php - 在 Phpseclib 中恢复下载

python - 需要运行 python sftp 服务器

perl - 查找 Perl 类的所有父类(super class)的最佳实践是什么?

Java被杀毒软件(特别是AVG)拦截

asp.net-mvc-3 - MVC3 下载单个文件

ftp - 使用远程 FTP 原子包和私钥发出与服务器的连接