使用单个会话在shell/bash中列出的递归FTP目录(使用cURL或ftp)

Tim*_*imo 6 ftp bash shell session curl

我正在编写一个shellcript,需要遍历ftp服务器上的所有文件夹和文件(递归).到目前为止,使用cURL一切正常 - 但它很慢,因为cURL为每个命令启动一个新会话.因此,对于500个目录,cURL预先进行500次登录.

有没有人知道,我是否可以使用cURL(这将是我最喜欢的解决方案)保持登录状态,或者我如何在shell脚本中只使用一个会话使用ftp?

我知道如何执行一组ftp命令并检索响应,但对于递归列表,它必须更加动态......

谢谢你的帮助!

fre*_*ker 10

该命令实际上是ncftpls -R.它将递归列出ftp文件夹中的所有文件.


mal*_*lat 5

只是为了总结到目前为止其他人所说的话。如果您试图编写一个可移植的shell脚本(用作批处理文件),则由于某些FTP服务器可能未实现,因此您需要使用lftp解决方案ls -R。在以下示例中,只需将123.456.789.100替换为ftp服务器的实际IP地址即可:

$ lftp -c "open 123.456.789.100 && find -l && exit" > listing.txt
Run Code Online (Sandbox Code Playgroud)

请参阅manlftp 的页面,转到以下find部分:

递归列出目录(默认为当前目录)中的文件。这可以帮助缺少ls -R支持的服务器。您可以重定向此命令的输出。

但是,如果您有办法确定远程ftp服务器是否实现了对的正确支持ls -lR,那么更好的(=更快的)解决方案是:

$ echo ls -lR | ftp 123.456.789.100 > listing.txt
Run Code Online (Sandbox Code Playgroud)

仅供参考,如果我执行第一个命令(lftp + find),则需要0m55.384s来检索完整列表,而如果执行第二个命令(ftp + ls-R),则需要0m3.225s。


gho*_*g74 -1

如果您只想创建所有文件和文件夹的列表,ssh则可以使用。像这样的东西(但请检查文档以了解正确的用法)

$ ssh user@host "ls -R /path"
Run Code Online (Sandbox Code Playgroud)