我正在使用Net::FTP::File
模块获取远程路径中的目录列表。它似乎工作正常,直到我踩到这个案例,名为en
的目录显示为n
,详情:
'n' => {
'Bytes' => '4096',
'Group' => 'client3',
'Owner' => '5004',
'Path' => 'n',
'Last Modified Year/Time' => '17:59',
'Permissions' => 'drwxrwxr-x',
'Last Modified Day' => '17',
'Link To' => undef,
'Number of Links' => '7',
'Last Modified Month' => 'Jan'
},
服务器上的目录具有正确的名称(en
)与显示正常的其他目录相同的所有者/组/权限。
我将测试用例减少到最小,所以我知道问题不依赖于其他错误:
#!/usr/bin/perl
use strict;
use warnings;
use Net::FTP::File;
use Data::Dumper;
$Data::Dumper::Terse = 1;
$Data::Dumper::Indent = 1;
my $ftp = new Net::FTP($site);
$ftp->login($user, $pass);
print Dumper $ftp->dir_hashref;
有什么我做错了可能会导致此错误吗?或者它是模块的dir_hashref()函数中的错误?
或者,什么是另一种(方便的)方式来获取FTP列表中的目录?标准Net::FTP
提供了dir()
方法,但它只是一个必须要解析的ls -l
个字符串的列表。
答案 0 :(得分:2)
我倾向于怀疑文件名包含一个不寻常的字符。
如果您使用普通的FTP客户端连接到该服务器,您是否看到具有正确名称的文件?
尝试将Debug参数传递给Net :: FTP构造函数,例如:
my $ftp = Net::FTP->new($hostname, Debug => 1);
这应该会为您提供更多的调试信息,特别是您的脚本和服务器之间的对话,这可能会有用。