我试图使用命令行ftp客户端ftp文件夹,但到目前为止,我只能使用“get”来获取单个文件。
当前回答
您可以依赖wget,它通常正确地处理ftp get(至少在我自己的经验中)。例如:
wget -r ftp://user:pass@server.com/
您也可以使用-m,它适用于镜像。它目前相当于-r -N - linf。
如果在凭据详细信息中有一些特殊字符,可以指定——user和——password参数以使其工作。使用特定字符自定义登录的示例:
wget -r --user="user@login" --password="Pa$$wo|^D" ftp://server.com/
正如@asmaier指出的,注意即使-r用于递归,它的默认最大级别为5:
- r ——递归 打开递归检索。 - l深度 ——水平=深度 指定递归最大深度级别的深度。默认最大深度为5。
如果你不想错过subdirs,最好使用镜像选项,-m:
- m ——镜子 打开适合镜像的选项。此选项启用递归和时间戳,设置为无限 递归深度,并保持FTP目录清单。它目前相当于-r -N - linf ——no-remove-listing。
其他回答
如果您可以使用scp而不是ftp,那么-r选项将为您完成此工作。我会检查一下你是否可以使用比FTP更现代的文件传输机制。
您可以依赖wget,它通常正确地处理ftp get(至少在我自己的经验中)。例如:
wget -r ftp://user:pass@server.com/
您也可以使用-m,它适用于镜像。它目前相当于-r -N - linf。
如果在凭据详细信息中有一些特殊字符,可以指定——user和——password参数以使其工作。使用特定字符自定义登录的示例:
wget -r --user="user@login" --password="Pa$$wo|^D" ftp://server.com/
正如@asmaier指出的,注意即使-r用于递归,它的默认最大级别为5:
- r ——递归 打开递归检索。 - l深度 ——水平=深度 指定递归最大深度级别的深度。默认最大深度为5。
如果你不想错过subdirs,最好使用镜像选项,-m:
- m ——镜子 打开适合镜像的选项。此选项启用递归和时间戳,设置为无限 递归深度,并保持FTP目录清单。它目前相当于-r -N - linf ——no-remove-listing。
你不应该使用ftp。像telnet一样,它不使用安全协议,密码以明文传输。这使得第三方很容易获取您的用户名和密码。
要远程复制远端目录,这些选项更好:
如果可以通过ssh登录,Rsync是最合适的工具,因为它只复制差异,并且在连接中断时可以很容易地在中间重新启动。 SSH -r是递归复制目录结构的次优选择。
要递归地获取文件,你可以使用这样的脚本: https://gist.github.com/flibbertigibbet/8165881
See:
Rsync手册 SSH手册
Wget -r ftp://url
适用于Redhat和Ubuntu
如果您想坚持使用命令行FTP,那么应该尝试NcFTP。然后可以使用get -R来递归地获取文件夹。你也会得到圆满。
推荐文章
- 如何在Mac上的命令行安装JQ ?
- 如何在Linux中循环目录?
- 在命令行中使用Firefox截取完整页面的截图
- 在pip install -U中“-U”选项代表什么
- 如何将参数转发到bash脚本中的其他命令?
- 如何确定一个进程是否运行在lxc/Docker内部?
- 仅在文件不存在时才将行追加到文件中
- 如何强制makefile重新构建目标?
- 如何在父进程退出后使子进程死亡?
- 从URL执行bash脚本
- [: shell编程中的意外操作符
- 使用Wget进行多个同时下载?
- Unix列表命令'ls'可以输出数值chmod权限吗?
- 在Unix中,我可以在一个目录中运行'make'而不首先cd'到该目录吗?
- 如何从命令行重置Jenkins安全设置?