[英]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.