![将 SFTP 上的文件复制到另一个目录而无需往返](https://linux22.com/image/1518449/%E5%B0%86%20SFTP%20%E4%B8%8A%E7%9A%84%E6%96%87%E4%BB%B6%E5%A4%8D%E5%88%B6%E5%88%B0%E5%8F%A6%E4%B8%80%E4%B8%AA%E7%9B%AE%E5%BD%95%E8%80%8C%E6%97%A0%E9%9C%80%E5%BE%80%E8%BF%94.png)
我尝试了这个,但是它当然不起作用:
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/终端访问服务器的权限,请使用shell
cp
命令。 - 如果您的 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