使用cURL下载目录中的所有文件

l--*_*''' 13 ftp bash shell sftp curl

我正在使用cURL尝试下载某个目录中的所有文件.

这是我的文件列表:

在此输入图像描述

我曾尝试在bash脚本做的事:iiumlabs.[].csv.pgpiiumlabs*,我想袅袅不上通配符大.

curl -u login:pass ftp.myftpsite.com/iiumlabs* -O
Run Code Online (Sandbox Code Playgroud)

问题:如何使用cURL下载此文件目录?

小智 36

如果您不必卷曲,您可能希望在递归模式下使用wget但将其限制为一个递归级别,请尝试以下操作:

wget --no-verbose --no-parent --recursive --level=1\
--no-directories --user=login --password=pass ftp://ftp.myftpsite.com/
Run Code Online (Sandbox Code Playgroud)
  • --no-parent :递归检索时,不要提升到父目录.
  • --level=depth:指定递归最大深度级别深度.默认最大深度为五层.
  • --no-directories :递归检索时不要创建目录层次结构.


Mic*_*rny 11

好的,考虑到您使用的是Windows,最简单的方法是使用ftp捆绑的标准工具.我将以下解决方案基于Windows XP,希望它在其他版本上也能正常工作(或稍作修改).

首先,您需要为程序创建一个批处理(脚本)文件ftp,其中包含相关说明.根据需要命名,然后输入:

curl -u login:pass ftp.myftpsite.com/iiumlabs* -O

open ftp.myftpsite.com
login
pass
mget *
quit
Run Code Online (Sandbox Code Playgroud)

第一行打开与ftp服务器的连接ftp.myftpsite.com.以下两行指定了登录,以及ftp要求的密码(替换loginpass仅使用登录名和密码,没有任何关键字).然后,您mget *用来获取所有文件.而不是*,您可以使用任何通配符.最后,您使用quit关闭ftp程序而无需交互式提示.

如果您需要先输入某个目录,请先添加cd命令mget.它应该非常简单.

最后,编写该文件并运行ftp如下:

ftp -i -s:yourscript
Run Code Online (Sandbox Code Playgroud)

其中-i禁用交互(询问下载文件前),并-s指定要创建的脚本路径.


遗憾的是,Windows中本机不支持通过SSH进行文件传输.但是对于那种情况,你可能还是想要使用PuTTy工具.对于这种情况特别感兴趣的是pscp其实际上是openssh scp命令的PuTTy反对部分.

语法类似于copy命令,它支持通配符:

pscp -batch login@mysshsite.com:iiumlabs* .
Run Code Online (Sandbox Code Playgroud)

如果使用密钥文件进行身份验证,则应使用密钥文件进行身份验证-i path-to-key-file.如果你使用密码,-pw pass.它还可以使用load -load your-session-name参数重用使用PuTTy保存的会话.


小智 7

这样的事情怎么样:

for /f %%f in ('curl -s -l -u user:pass ftp://ftp.myftpsite.com/') do curl -O -u user:pass ftp://ftp.myftpsite.com/%%f
Run Code Online (Sandbox Code Playgroud)


小智 6

对于 Mac,您可以使用这样的脚本:

for f in $(curl -s -l -u user:pass ftp://your_ftp_server_ip/folder/) 
 do curl -O -u user:pass ftp://your_ftp_server_ip/folder/$f 
done
Run Code Online (Sandbox Code Playgroud)