如何在sftp中实现递归放入

时间:2009-10-20 15:43:03

标签: recursion sftp put

我的Ubuntu中的命令行sftp没有实现递归put。我发现2004年有关于使用-R选项开关实现此类功能的一些争论。所以我认为某种自制的递归是唯一的选择。

  • 遍历目录列表
  • cd into directories
  • 如果不存在则mkdir
  • 放文件

我打算用bash做这个,但任何其他语言就足够了。

Rsync或scp不是一个选项,因为我没有对服务器的shell访问权限。只有sftp。

9 个答案:

答案 0 :(得分:16)

看看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"

答案 1 :(得分:2)

GUI FTP客户端FileZilla也支持SFTP,并且还支持在目录下上传和下载。

答案 2 :(得分:2)

虽然我认为lftp是最好的选择,如果它可用,我会被困在一个古老的Cent OS安装上,需要通过SFTP进行递归放置。这就是我的所作所为:

find dir -type d -exec echo 'mkdir {}' \; | sftp user@host
find dir -type f -exec echo 'put {} {}' \; | sftp user@host

所以基本上确保所有目录都存在,然后发送文件。

答案 3 :(得分:2)

我的ubuntu 12.04在sftp中附带put -r

答案 4 :(得分:1)

在命令行中,您可以使用 putty-tools 包执行此操作。 它附带一个名为psftp的sftp替代品。

它支持mput -r,它以递归方式将本地目录复制到远程。

答案 5 :(得分:0)

我想你可以用bash做到这一点,但这将是很多工作。相反,我建议您查看Python and the Chilkat library

答案 6 :(得分:0)

在Java中,您可以使用我们的商业产品edtFTPj/PRO通过SFTP递归传输。或者,您可能需要考虑SCP - 通常支持递归并通过SSH运行。

答案 7 :(得分:0)

sshfs怎么样?

当然,与cp -r合并。

或者,如果失败,rsync -r本身。

答案 8 :(得分:0)

经过大量的谷歌搜索和良好的答案,我使用传输同步为工作。这不是一个很好的解决方案,但能胜任。