如何将文件从谷歌计算引擎复制到本地目录
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 <vm's IP>/<your file path>
例如,如果我的 vm 的 IP 是 1.2.3.4
并且我想复制 /home/me/myFolder/myFile
,那么只需将这个文件复制到 /var/www/html
中
然后运行wget 1.2.3.4/myfile
【讨论】:
以上是关于如何将文件从谷歌计算引擎复制到本地目录的主要内容,如果未能解决你的问题,请参考以下文章