将 SFTP 上的文件复制到另一个目录而无需往返

将 SFTP 上的文件复制到另一个目录而无需往返

我尝试了这个,但是它当然不起作用:

sftp> cp baz.txt foo/bar/
Invalid command.

有没有办法通过sftp连接来实现这一点?


当然,我意识到如果我使用 连接,这很简单ssh。但是,我有一个 sftp 服务器,我实际上无法做到这一点,因为ssh-ing 给了我一个不同的起始目录,并且我无法控制(甚至不知道)远程上的绝对路径;当我使用 连接时,我需要一切都相对于启动目录工作sftp

答案1

核心 SFTP 协议不支持复制远程文件。

这是copy-file协议的扩展,但只有少数 SFTP 服务器支持此功能(FTPD软件mod_sftp和 Bitvise SFTP 服务器)和一些 SFTP 客户端(温SCP例如)。

最广泛使用的 SFTP 服务器,OpenSSHcopy-data仅在最近才支持版本 9.0.其sftp客户现已cp/copy命令。


替代方案(您似乎知道但不会帮助您):

  • 如果你有 SSH/终端访问服务器的权限,请使用shellcp命令
  • 如果您的 SFTP 服务器支持该copy-file扩展,请使用也支持该扩展的 SFTP 客户端。
  • 否则,您唯一的选择是将文件下载到本地临时位置,并将其副本上传回不同的/目标远程目录。
    一些 SFTP 客户端甚至可以一次性透明地为您完成此操作(例如在 WinSCP 中,请参阅通过本地临时副本进行复制选项重复对话框)。

(我是 WinSCP 的作者)

答案2

sftp协议没有任何命令来复制远程服务器上的文件。请参阅手册页sftp到可用命令列表。

答案3

这是可能的,我一直通过 Mac 终端使用 scp 命令执行此操作。

scp [选项] 用户名1@源主机:目录1/文件名1 用户名2@目标主机:目录2/文件名2

答案4

您可以使用以下 FTP 命令

sftp> put baz.txt /foo/bar/baz.txt

相关内容