我的Ubuntu上的命令行sftp没有实现递归上传功能。我发现2004年有一些关于使用-R选项开关实现这种特性的辩论。所以我认为自己制作递归上传是唯一的选择。
即:
- 遍历目录列表
- 进入目录
- 如果不存在,则创建它们
- 上传文件
我计划用bash来完成这个任务,但也可以使用其他任何语言。
因为我没有服务器的shell访问权限,所以rsync或scp不是一个选择。
看看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
基本上要确保所有目录存在,然后发送文件。
我的Ubuntu 12.04自带sftp中的put -r
图形用户界面FTP客户端FileZilla也支持SFTP,同时支持目录上传和下载。
psftp
的sftp替代品。mput -r
,可递归地将本地目录复制到远程目录。在经过大量谷歌搜索和获得很好的答案后,我使用了 Transmit 同步来完成这项工作。虽然不是一个非常好的解决方案,但确实能胜任该工作。
这是如何做到的 --
sftp -r <host>
password: <pass>
cd <remote dir> # moves to remote dest dir
put -r localdir/* # creates dir and copies files over