假设我在远程SFTP服务器上有一个文件/home/user/dir1/file.txt
。当我处于连接到此服务器的sftp
会话(我的服务器只允许sftp
连接,但不允许ssh
连接!)时,我想将此文件复制到/home/user/dir2/file.txt
吗?
有可能这样做吗?如果是,命令是什么?
例如,以下命令将重命名并将文件从远程服务器上的一个目录移动到另一个目录。
sftp> rename dir1/file.txt dir2/file.txt
我正在寻找一个命令,可以将文件从远程服务器上的一个目录复制到另一个目录(如果存在的话)。
解决方法是从第一个位置下载文件并上传到第二个位置,但当有问题的文件很大并且网络连接缓慢时,这不是一个选项!
不确定您所说的"命令";。您指的是SFTP协议请求吗?或者某个可编写脚本/命令行SFTP客户端的命令(例如OpenSSH sftp
)?
SFTP协议本身不允许复制远程文件。尽管有一个名为copy-file
的协议的可选扩展可以达到这个目的。
引用copy-file
扩展规范:
6.复制远程文件
byte SSH_FXP_EXTENDED uint32 request-id string "copy-file" string source-file string destination-file bool overwrite-destination
此请求将文件从服务器上的一个位置复制到另一个位置。服务器以SSH_FXP_STATUS进行响应。
不过,没有多少SFTP服务器支持该扩展。我知道ProFTPD mod_sftp
和Bitvise WinSSHD都支持。OpenSSH只在最新的9.0版本中支持相关的copy-data
。