首页 > 解决方案 > 有没有办法使用 Net::SFTP::Foreign 递归地列出文件?

问题描述

我正在尝试使用Net::SFTP::Foreign.

目前,我正在使用这一行来提取我的 SFTP 站点上的文件列表

my @newfilesLookedAtList = @{$sftp->ls(names_only => 1)}

它工作正常,但它只向我显示目录。我需要目录中的文件名列表。我在网站上找到了这个答案 - https://stackoverflow.com/a/32267575/5652660,其中指出我可以使用以下内容:

$sftp->find(@paths, %opts) 对给定目录 $path(或目录@path)进行递归搜索,并返回在标量上下文中找到的条目列表或它们的总数。

每个条目都是对带有两个键的哈希的引用:文件名,条目的完整路径;a,一个 Net::SFTP::Foreign::Attributes 对象,包含文件 atime、mtime、权限和大小。

当我应用上面的代码时:

my @newfilesLookedAtList = @{$sftp->find('/', names_only => 1)};

我的文件@newfilesLookedAtList返回空。

标签: perl

解决方案


Net::SFTP::Foreign POD 声明find返回一个list ,这意味着您不应该尝试取消引用它。改变:

my @newfilesLookedAtList = @{$sftp->find('/', names_only => 1)};

至:

my @newfilesLookedAtList = $sftp->find('/', names_only => 1);

推荐阅读