【问题标题】:Perl Net::FTP not lists particular filePerl Net::FTP 不列出特定文件
【发布时间】:2019-10-16 18:18:09
【问题描述】:

我正在尝试使用 Net::FTP Perl 模块列出远程主机的文件。稍后我想使用put 命令下载它。

是否可以使用ls 命令列出特定文件

我使用的语法是:

$remote_dir = "/home/user/test_dir/";
$ftp->cwd($remote_dir);
$file_name = "test.txt";
print $ftp->ls($file_name);

当我尝试手动检查时,此文件存在于远程服务器中。但是没有上市。

ftp->ls(); 仅用于列出目录内容,还是可以用于列出我上面提到的目录中的特定文件?

【问题讨论】:

  • 您需要确定FTP服务器的根目录在哪里,并建立从该根到您感兴趣的文件的路径。FTP根不太可能是文件系统根目录,所以它是/home/user/test_dir/ 的远程路径不太可能有效。

标签: perl ftp


【解决方案1】:

ftp->ls(); 仅用于列出目录内容也可以用于列出目录中的特定文件

来自the documentation

ls ( [ DIR ] )
获取 DIR 的目录列表,或当前目录。

因此,明确记录了列出目录,而不是特定的常规文件。

【讨论】:

  • 也就是说,将目录内容放入数组后,我应该选择文件?@files = $ftp->ls(); foreach ( @files ) { print "Found : $file_name\n" if( $_ =~ /$file_name/); }
  • @vinodk89:正确,如果您想知道目录中是否存在文件,则需要获取目录列表并查找文件。
  • @Skeeve: ls 是根据 FTP NLST 命令实现的。此命令在RFC 959 中定义为“路径名应指定目录或其他系统特定的文件组描述符;”,即目录或类似的东西(取决于操作系统)。特定的 FTP 服务器实际上也可能支持常规文件名,但这种情况超出了规范,因此您不应依赖此,也不应将您在单个服务器上看到的内容概括为您对其他服务器的期望。
  • @Skeeve Steffen 是对的。对于类似的问题(对于其他语言),请参阅例如 FTP directory partial listing with wildcardsChecking file existence on FTP server
  • @vinodk89:请不要在评论中提出新问题。用足够的细节(代码、调试输出)提出一个新问题。除此之外,Net::SFTP 使用完全不同的协议:SFTP 基于 SSH 而不是 FTP。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多