从 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
的命令>
时,会响应成功代码和空的回复正文,而不是说“没有这样的文件”。