为什么我的 FTP 输出文件是空白的?

为什么我的 FTP 输出文件是空白的?

从 Windows 命令提示符,我已通过 FTPd 连接到 Windows Web 服务器。我可以看到get一个文件,并且可以看到带有的目录列表dir,但我想在本地保存该列表。

我试过dir > c:\somefile.txt文件已创建,但为空白。如果我这么做,结果也是一样ls > c:\somefile.txt

当我从 Linux 机器通过 FTP 传输数据时,结果是一样的。

FTP 返回以下内容:

200 PORT 命令成功
150 打开 /bin/ls 的 ASCII 模式数据连接
226 传输完成

答案1

这可能是因为 FTP.exe 控制了 shell。因此,cmd.exe 处理的重定向不起作用。

你可以使用 -s:filename 选项并将整个 ftp 输出重定向到一个文件。它将包含比你想要的更多的内容,但你可以稍后再处理。

或者,也许,寻找具有此功能的其他 ftp 客户端(我不知道有任何)。

答案2

Igal Serban 的答案是正确的。试试这个,

ftp -s:ftp.txt > ftp.log 2>&1

在哪里FTP服务器是一个脚本,只是命令列表,例如,

help
pwd
quit

FTP 日志将捕获输出。添加2>&1意味着您可以捕获标准输出(正常输出)和标准误差(任何来自FTP 工具)。

答案3

您可以通过执行以下操作将目录列表放入本地文件中:

dir [remote-directory] [local-file]

就你的情况而言,命令是

dir . c:\somefile.txt

它没有回答为什么的问题,但却完成了你想要做的事情。

答案4

Martin Bøgelund 的回答的附录:

这个为什么问题(我猜是“为什么最初的尝试会这样做”)很有趣,而且如果你以正确的方式思考它,它就很简单:它是相同的dir [remote-directory] [local-file]语法,远程目录恰好是>。ftp 客户端不是 shell。输入到其中的命令不是 shell 命令。它没有重定向运算符,也不>是特殊字符。

是的,就是你在您的 FTP 服务器上有一个名为的目录>,只要您不是在 Windows 上运行它。

Windows 中发现ftp.exe的 是早期 BSD ftp 的副本。它不知道 Windows 文件名限制。如果您告诉它,它将get remotefile >尝试将远程文件的副本保存为名为 的本地文件>,并会因本地文件系统限制而失败。

造成这里混淆的主要原因是,FTP 服务器在接收到带有参数LIST的命令>时,会响应成功代码和空的回复正文,而不是说“没有这样的文件”。

相关内容