在机器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
答案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