2009-10-20 26 views
14

我的Ubuntu中的命令行sftp没有递归实现。我在2004年发现了一些关于使用-R选项开关实现这种功能的争论。所以我看到某种自制递归作为唯一的选择。如何在sftp中实现递归放置

即,

  • 迭代通过目录列表
  • cd到目录
  • 的mkdir他们,如果不存在
  • 放文件

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

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

+1

看看我的回答对解决方案使用的lftp – 2010-10-11 09:55:14

+0

为什么是必要的SCP shell访问? – user102008 2011-06-29 20:02:03

回答

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" 
+0

谢谢,lftp似乎做的工作。幸运的是,我没有和'09'相同的约束条件:) – aarreoskari 2012-10-08 11:18:30

0

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

0

sshfs怎么样?

结合,当然,与cp -r

或者,如果没有,rsync -r本身。

+0

从问题引用:“Rsync或scp不是一个选项,因为我没有shell访问服务器,只有sftp。” Sshfs要求ssh访问,我只有sftp。 – aarreoskari 2010-04-06 14:01:22

+0

呵呵。我从来没有听说过没有ssh访问的sftp访问,所以我想我的大脑忽略了这部分。你仍然可以尝试sshfs。我实际上并不知道它是通过ssh还是sftp工作。如果您使用的是GNOME或KDE,则只需在各自的文件浏览器中输入sftp路径即可。 – 2010-04-06 17:04:24

0

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

2

图形用户界面的FTP客户端的FileZilla也支持SFTP,同时还支持上传和下载,而目录。

1

在命令行上,您可以通过使用腻子工具包进行此操作。 它带有一个名为psftp的sftp替代品。

它支持mput -r将本地目录复制到远程。

2

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

find dir -type d -exec echo 'mkdir {}' \; | sftp [email protected] 
find dir -type f -exec echo 'put {} {}' \; | sftp [email protected] 

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

1

我的Ubuntu 12.04自带put -r在SFTP