我的Ubuntu中的命令行sftp没有递归实现。我在2004年发现了一些关于使用-R选项开关实现这种功能的争论。所以我看到某种自制递归作为唯一的选择。如何在sftp中实现递归放置
即,
- 迭代通过目录列表
- cd到目录
- 的mkdir他们,如果不存在
- 放文件
我打算使用bash这样做,但任何其他语言就足够了。
Rsync或scp不是一个选项,因为我没有shell访问服务器。只有sftp。
我的Ubuntu中的命令行sftp没有递归实现。我在2004年发现了一些关于使用-R选项开关实现这种功能的争论。所以我看到某种自制递归作为唯一的选择。如何在sftp中实现递归放置
即,
我打算使用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似乎做的工作。幸运的是,我没有和'09'相同的约束条件:) – aarreoskari 2012-10-08 11:18:30
我想你可以用bash做到这一点,但这将是很多工作。相反,我建议看看Python and the Chilkat library。
在Java中,您可以使用我们的商业产品edtFTPj/PRO通过SFTP递归传输。或者,您可能需要考虑SCP - 通常支持递归并通过SSH运行。
从问题引用:“Rsync或scp不是一个选项,因为我没有shell访问服务器,只有sftp。” Sshfs要求ssh访问,我只有sftp。 – aarreoskari 2010-04-06 14:01:22
呵呵。我从来没有听说过没有ssh访问的sftp访问,所以我想我的大脑忽略了这部分。你仍然可以尝试sshfs。我实际上并不知道它是通过ssh还是sftp工作。如果您使用的是GNOME或KDE,则只需在各自的文件浏览器中输入sftp路径即可。 – 2010-04-06 17:04:24
经过大量的谷歌搜索和良好的答案,我使用传输同步的工作。这不是一个很好的解决方案,但是完成这项工作。
图形用户界面的FTP客户端的FileZilla也支持SFTP,同时还支持上传和下载,而目录。
在命令行上,您可以通过使用腻子工具包进行此操作。 它带有一个名为psftp
的sftp替代品。
它支持mput -r
将本地目录复制到远程。
虽然我认为lftp是最好的选择,但如果它可用的话,我被卡在一个古老的Cent OS安装上,需要通过SFTP进行递归放置。这是我做的:
find dir -type d -exec echo 'mkdir {}' \; | sftp [email protected]
find dir -type f -exec echo 'put {} {}' \; | sftp [email protected]
所以基本上确保所有的目录存在,然后发送文件。
我的Ubuntu 12.04自带put -r
在SFTP
看看我的回答对解决方案使用的lftp – 2010-10-11 09:55:14
为什么是必要的SCP shell访问? – user102008 2011-06-29 20:02:03