繁体   English   中英

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

[英]How to get files matching a pattern using perl Net::SFTP::Foreign

这是我第一个提交的问题,我希望有人能帮助我解决这个问题。 我以前从未使用过 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)
{
    ...
}

我是否必须先编写一个 File-Pattern 到 Regex 转换器,还是有更简单的方法来实现这一点? 也许匹配foreach的文件名?

Net::SFTP::Foreign为此提供了glob方法:

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

尝试使用Text::Glob,尤其是其中的 glob_to_regex 函数

它现在工作正常。 感谢 JGNI 和 Text::Glob 模块

使用模块后:

use Text::Glob 'glob_to_regex';

我们可以使用像 ftp->ls 这样的模式:

$Pattern = *.*;
my $FilesRef = $sftp->ls(names_only => 1, wanted => glob_to_regex($Pattern));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM