Recursion 如何在sftp中实现递归put

Recursion 如何在sftp中实现递归put,recursion,sftp,put,Recursion,Sftp,Put,我的Ubuntu中的命令行sftp没有实现递归put。我发现了2004年关于使用-R选项开关实现这种特性的一些争论。所以我认为某种自制的递归是唯一的选择 即 遍历目录列表 将cd放入目录中 如果不存在,则将其删除 放文件 我计划用bash来实现这一点,但任何其他语言都可以 Rsync或scp不是一个选项,因为我没有对服务器的shell访问权。只有sftp。我想你可以用bash来完成这项工作,但这需要做很多工作。相反,我建议您看看。在Java中,您可以使用我们的商业产品,通过SFTP进行递归传

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

  • 遍历目录列表
  • 将cd放入目录中
  • 如果不存在,则将其删除
  • 放文件
我计划用bash来实现这一点,但任何其他语言都可以


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

我想你可以用bash来完成这项工作,但这需要做很多工作。相反,我建议您看看。

在Java中,您可以使用我们的商业产品,通过SFTP进行递归传输。或者,您可能需要考虑SCP——它一般支持递归,并在SSH上运行。

< P> 当然,结合了
cp-r


或者,如果做不到这一点,
rsync-r

经过大量的谷歌搜索和很好的回答,我使用了传输同步来完成这项工作。这不是一个很好的解决方案,但确实有效。

看看。它是一个功能强大的文件传输客户端,支持ftp、ftps、http、https、hftp、fish(通过ssh外壳会话进行文件传输)和sftp。它具有类似ftp的交互界面,但也允许在命令行中指定所有命令。查看
mput
(非递归但处理全局模式)和
mirror
(穷人的rsync)命令

我将其用于只处理sftp上传的服务器,如下所示:

lftp -c "open -u $MYUSER,$MYPASSWORD sftp://$TARGET ; mirror -R $SOME_DIRECTORY"

GUI FTP客户端FileZilla还支持SFTP,还支持在目录中上载和下载。

在命令行上,您可以使用putty tools软件包来实现这一点。 它附带了一个名为
psftp
的sftp替代品


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

虽然我认为lftp是最好的选择,如果它可用的话,但我在一个古老的Cent OS安装上遇到了麻烦,只需要通过SFTP进行递归put。以下是我所做的:

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
,“Rsync或scp不是一个选项,因为我没有服务器的shell访问权限。只有sftp。”Sshfs需要ssh访问,而我只有sftp.Huh。我从来没有听说过在没有ssh访问的情况下使用sftp访问,所以我想我的大脑忽略了这一部分。你仍然可以尝试sshfs。我实际上不知道它是通过ssh还是sftp工作的。如果您使用的是GNOME或KDE,您只需在各自的文件浏览器中键入sftp路径即可。请看我关于使用lftp的解决方案的答案为什么scp需要shell访问?谢谢,lftp似乎可以完成这项工作。幸运的是,我没有09年那样的限制:)