我的 Ubuntu 中的命令行 sftp 没有实现递归 put。我在 2004 年发现了一些关于使用 -R 选项开关实现此类功能的争论。所以我认为某种自制递归是唯一的选择。
IE。
- 遍历目录列表
- cd 进入目录
- 如果不存在,mkdir 他们
- 放文件
我打算用 bash 来做这件事,但任何其他语言都足够了。
Rsync 或 scp 不是一个选项,因为我没有对服务器的 shell 访问权限。只有sftp。
看看lftp。它是一个强大的文件传输客户端,支持 ftp、ftps、http、https、hftp、fish(通过 ssh shell 会话进行文件传输)和sftp。它具有类似 ftp 的交互界面,但也允许在命令行中指定所有命令。查看mput
(非递归但处理 glob 模式)和mirror
(穷人的 rsync)命令。
我将它与仅处理 sftp 上传的服务器一起使用,如下所示:
lftp -c "open -u $MYUSER,$MYPASSWORD sftp://$TARGET ; mirror -R $SOME_DIRECTORY"
虽然我认为 lftp 是最好的选择(如果它可用),但我卡在了 Cent OS 的古老安装上,只需要通过 SFTP 进行递归放置。这是我所做的:
find dir -type d -exec echo 'mkdir {}' \; | sftp user@host
find dir -type f -exec echo 'put {} {}' \; | sftp user@host
所以基本上确保所有目录都存在,然后将文件发送过来。
GUI FTP客户端FileZilla也支持SFTP,也支持同时目录上传和下载。
我的 ubuntu 12.04 自带put -r
sftp
在命令行上,您可以使用putty-tools包来执行此操作。它带有一个名为psftp
.
它支持mput -r
将本地目录以递归方式复制到远程。
经过大量的谷歌搜索和良好的答案后,我使用传输同步来完成这项工作。不是一个很好的解决方案,但可以完成工作。
我想你可以用 bash 做到这一点,但这将是很多工作。相反,我建议看一下Python 和 Chilkat library。
在 Java 中,您可以使用我们的商业产品edtFTPj/PRO通过 SFTP 递归传输。或者,您可能需要考虑 SCP - 它通常支持递归并通过 SSH 运行。
这是如何 -
sftp -r <host>
password: <pass>
cd <remote dir> # moves to remote dest dir
put -r localdir/* # creates dir and copies files over