sftp:上传文件夹中包含的所有文件、目录和子目录

fib*_*n82 32 sftp put

在机器 AI 上有文件夹

/home/a/
Run Code Online (Sandbox Code Playgroud)

在机器 BI 上有文件夹

/home/b/
Run Code Online (Sandbox Code Playgroud)

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

sftp fibon82@machineB.com
put /home/a/* /home/b/
Run Code Online (Sandbox Code Playgroud)

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

谢谢!:)

编辑:

我用scp解决了:

scp -r /home/a/ fibon82@machineB.com:/home/b/
Run Code Online (Sandbox Code Playgroud)

小智 26

sftp这个命令中递归上传当前目录的内容到远程当前目录:

 put -r .
Run Code Online (Sandbox Code Playgroud)

man sftp


Kar*_*los 23

尽管不严格等同于 sftp,但rsync是 scp 和 sftp 的一个非常强大的替代方案,尤其是在将副本从机器 A 更新到机器 B 时,因为它不会复制尚未更改的文件;它还能够从机器 B 中删除已从机器 A 中删除的文件(当然只有在它被告知的情况下)。

在您的情况下,语法将是

rsync -zrp /home/a/ user@remote.host.com:/home/b/
Run Code Online (Sandbox Code Playgroud)

-r选项用于递归复制文件,-z在传输过程中启用压缩,并-p在复制时保留文件权限(文件创建、编辑等),这是 scp 不执行 AFAIK 的事情。更多的选择是可能的;像往常一样,阅读man页面。

  • 遗憾的是 `rsync` 不会使用 `sftp` 协议。因此,如果您在 `internal-sftp`](https://wiki.archlinux.org/index.php/SFTP_chroot) 中使用 `ssh` 的构建来设置 [`sftp`-chroot,那么 `rsync` 将失败。 (3认同)

dee*_*392 10

scp(安全副本)实际上是 Linux 上通过安全隧道传输文件的工具。在您的情况下,您希望使用递归开关,例如:

scp -r /home/a/ user@remote.host.com:/home/b/
Run Code Online (Sandbox Code Playgroud)

  • sftp 和 scp 实际上是不同的协议,都是基于 ssh 的。 (6认同)