如何将文件从谷歌计算引擎复制到本地目录

Posted

技术标签:

【中文标题】如何将文件从谷歌计算引擎复制到本地目录【英文标题】:How to copy files from google compute engine to local directory 【发布时间】:2017-12-12 10:23:24 【问题描述】:

我正在尝试使用以下命令将文件从我的实例复制到我的本地目录

gcloud compute scp <instance-name>:~/<file-name> ~/Documents/

但是,它显示如下所述的错误

$USER/Documents/:是一个目录

错误:(gcloud.compute.scp) [/usr/bin/scp] 退出并返回代码 [1]。

从本地目录复制到 GCE 可以正常工作。

我也查看了斯坦福的教程和 Google 的文档。

我还有一个没有类似问题的实例。

我有点相信这可能是 SSH 密钥的问题。

可能出了什么问题?

【问题讨论】:

你提到的斯坦福教程有链接吗? 您也可以链接到您正在阅读的任何 Google 文档。 【参考方案1】:

如果您的源路径和目标路径正确,则您的命令是正确的

将文件从 Google Compute Engine VM 复制到我的本地计算机时,您在问题中发布的命令对我有效。

$ gcloud compute scp vm1:~/.bashrc ~/Documents/
.bashrc                                          100% 3515     3.4KB/s   00:00

我也尝试从另一端进行复制(即从我的本地机器到 GCE VM)并且它有效:

$ gcloud compute scp ~/Documents/.bashrc vm1:~/temp/
.bashrc                                          100% 3515     3.4KB/s   00:00

$ gcloud compute scp ~/Documents/.bashrc vm1:~/.bashrc-new
.bashrc                                          100% 3515     3.4KB/s   00:00

gcloud 依赖于您的PATH 中的scp 可执行文件。您提供给gcloud scp 命令的参数将传递给scp 二进制文件。假设您的源和目标路径是正确的,它应该可以工作。

使用scp进行递归复制

不过,根据您的特定错误消息,我发现只有当您尝试复制的源路径是目录而不是文件时,才会出现这种变化。对于这种特殊情况,您可以传递一个--recurse 参数(类似于常规scp 支持的-r 参数),它将递归复制指定目录下的所有文件和目录。

gcloud compute scp --recurse SRC_PATH DEST_PATH

【讨论】:

根据docs,该标志似乎是--recurse,而不是-r,我无法让-r 工作。这是一个 SSH 标志,而不是 gcloud compute scp 标志。 感谢@MishaBrukman - 是的,我得到了常规scp 支持的-r 参数。对于gcloud compute scp,它是--recurse。更新了答案。 如何指定区域 @Palsri 您可以通过 --zone=your_instance_zone 指定区域【参考方案2】:

要将文件从虚拟机复制到您的桌面,您可以简单地通过 SSH 连接到虚拟机,右上角有一个 设置 按钮,您会在其中找到下载文件选项只需输入文件的路径。

如果是文件夹,则先压缩文件夹然后下载。

【讨论】:

不知道你能做到这一点。谢谢!【参考方案3】:

一切都很完美,除了我试图在连接到 GCE 的终端上而不是本地终端上运行这些命令。

oyashi@oyashi-torch-instance:~$ gcloud compute scp oyashi-torch-instance:~/spring1617_assignment1.zip ~/Documents/

/home/oyashi/Documents/: 是目录错误: (gcloud.compute.scp) [/usr/bin/scp] 退出并返回代码 [1]。

但是当我在本地终端上尝试这个时。这发生了。

oyashi@oyashi:~/Documents$ gcloud compute scp oyashi-torch-instance:~/spring1617_assignment1.zip ~/Documents/

spring1617_assignment1.zip 100% 42KB 42.0KB/s 00:00

感谢大家的 cmets 和帮助。我知道这是一个愚蠢的错误。但是我发布了这个答案,以便其他人可以从我的愚蠢中吸取教训。

【讨论】:

【参考方案4】:

如果您需要传递区域信息,您可能喜欢做的项目名称,因为它对我有用: 实例名称是您在 GCP 实例中选择的名称。

gcloud beta compute scp --project "project_name" --zone "zone_name" instance_name:~jupyter/file_name /home/Downloads

【讨论】:

【参考方案5】:

我遇到了同样的问题。关键是您应该从本地终端而不是云端终端运行 scp 命令。

【讨论】:

【参考方案6】:

用于从 Ubuntu vmware 复制文件到本地机器

例如:您有实例名称:bhk

【讨论】:

【参考方案7】:

运行一个基本的 nginx 服务器并复制 /var/www/html (nginx 服务目录) 中的所有文件,然后从您的本地计算机简单运行 wget &lt;vm's IP&gt;/&lt;your file path&gt;

例如,如果我的 vm 的 IP 是 1.2.3.4 并且我想复制 /home/me/myFolder/myFile ,那么只需将这个文件复制到 /var/www/html

然后运行wget 1.2.3.4/myfile

【讨论】:

以上是关于如何将文件从谷歌计算引擎复制到本地目录的主要内容,如果未能解决你的问题,请参考以下文章

如何将文件从远程服务器复制到本地计算机? [关闭]

gsutil - 如何从谷歌私有云复制/下载所有文件?

linux文件拷贝到其他机器

如何查看 hdfs 目录并将到达 hdfs 的最新文件复制到本地?

如何远程复制另一台Linux服务器

如何使用Fabric将目录复制到远程计算机?