编辑:

编辑:

在机器AI上有文件夹

/home/a/

在机器 BI 上有文件夹

/home/b/

我希望使用 sftp 将 /home/a 的所有文件、目录和子目录传输到 /home/b 中。在机器 AI 上尝试了以下命令:

sftp [email protected]
put /home/a/* /home/b/

但它不起作用,我收到错误消息:“跳过非常规文件/home/a/a1”...[a1 是 a 的子目录]
我该如何修改 put 指令?

谢谢! :)

编辑:

我使用 scp 解决了:

scp -r /home/a/ [email protected]:/home/b/

答案1

虽然严格来说并不等同于 sftp,同步是 scp 和 sftp 的一个非常强大的替代品,特别是在将副本从机器 A 更新到机器 B 时,因为它不会复制未被改变的文件;它还能够从机器 B 中删除已从机器 A 中删除的文件(当然,只有在被告知的情况下)。

就你的情况而言,语法是

rsync -zrp /home/a/ [email protected]:/home/b/

-r选项用于递归复制文件,-z在传输过程中启用压缩,并-p在复制时保留文件权限(文件创建、编辑等),据我所知,这是 scp 无法做到的。还有更多选项可用;像往常一样,请阅读页面man

答案2

sftp命令递归地将当前目录的内容上传到远程当前目录:

 put -r .

man sftp

答案3

scp(安全复制)是 Linux 中通过安全隧道传输文件的实际方法。对于您的情况,您可能希望使用递归开关,例如:

scp -r /home/a/ [email protected]:/home/b/

答案4

实际上,put -r 应该可以工作。但目标文件夹需要存在于远程主机上:

sftp> put -r sourcefolder
 Uploading sourcefolder/ to /user/folder
 Couldn't canonicalize: No such file or directory
 ....
sftp> mkdir sourcefolder
sftp> put -r sourcefolder
 Uploading sourcefolder/ to /user/folder/sourcefolder
 Entering sourcefolder/
 sourcefolder/file1
 sourcefolder/file2

相关内容