如何使用 SFTP 将文件复制/复制到另一个目录?

问题描述 投票:0回答:2

我已在 SFTP 位置中创建了一个目录,并且想要将文件从一个 SFTP 目录移动到另一个目录,但那里不支持

cp
命令。

我怎样才能实现这个目标?

sftp
2个回答
13
投票

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

copy-file
协议扩展草案。但只有少数 SFTP 服务器(例如 ProFTPD
mod_sftp
和 Bitvise SFTP 服务器)和少数 SFTP 客户端(例如 WinSCP)支持这一点。

最广泛使用的 SFTP 服务器,OpenSSH 仅在最近的

版本 9.0
中支持相关的 copy-data。它的
sftp
客户端现在有
cp
/
copy
命令。


替代方案:

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

(我是WinSCP的作者)


1
投票

您可以在命令行模式下使用 WinSCP 克隆远程目录 (

winscp /console
)。假设您在远程 SFTP 服务器上有以下结构:

theDestinationDirectory/
  |-file1.txt
  |-file2.txt

您可以使用以下脚本复制此远程目录(在 WinSCP 控制台中):

open sftp://myUsername:[email protected]
mkdir theDestinationDirectory
call cp theSourceDirectory/* theDestinationDirectory/ -r

然后您可以检查您的副本是否已正确完成(在 WinSCP 控制台中):

ls theDestinationDirectory

drwxr-sr-x   2 uid12345 gid12345        37 Jul 29 23:50:24 2016 .
drwxr-sr-x   6 uid12345 gid12345        75 Jul 29 23:50:11 2016 ..
-rw-r--r--   1 uid12345 gid12345     29670 Jul 29 23:50:24 2016 file1.txt
-rw-r--r--   1 uid12345 gid12345     12432 Jul 29 23:50:24 2016 file2.txt

请注意,正如 Martin Prikryl 所写,这可能并非所有 SFTP 服务器都支持......(至少我的支持)

© www.soinside.com 2019 - 2024. All rights reserved.