14

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

IE。

  • 遍历目录列表
  • cd 进入目录
  • 如果不存在,mkdir 他们
  • 放文件

我打算用 bash 来做这件事,但任何其他语言都足够了。

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

4

10 回答 10

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"
于 2010-10-11T09:53:34.407 回答
4

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

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

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

于 2013-07-12T06:53:47.123 回答
2

GUI FTP客户端FileZilla也支持SFTP,也支持同时目录上传和下载。

于 2011-06-29T20:04:20.263 回答
2

我的 ubuntu 12.04 自带put -rsftp

于 2014-05-01T08:13:31.420 回答
1

在命令行上,您可以使用putty-tools包来执行此操作。它带有一个名为psftp.

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

于 2013-02-08T16:38:52.713 回答
0

sshfs怎么样?

当然,结合cp -r.

或者,rsync -r自己失败了。

于 2010-02-26T00:37:10.623 回答
0

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

于 2010-04-06T14:02:44.577 回答
0

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

于 2009-10-20T15:47:58.600 回答
0

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

于 2009-10-21T00:27:08.603 回答
0

这是如何 -

sftp -r  <host>
password:  <pass>

cd <remote dir>     # moves to remote dest dir

put -r localdir/*   # creates dir and copies files over
于 2022-01-30T20:52:05.883 回答