Google compute engine gcloud计算复制文件成功,但未显示任何文件

Google compute engine gcloud计算复制文件成功,但未显示任何文件,google-compute-engine,gcloud,Google Compute Engine,Gcloud,我正在将数据从本地计算机复制到计算引擎实例: gcloud compute copy files/Users/me/project/data.csv实例名称:~/project 该命令将运行并完成以下操作: data.csv 100% 74KB 73.9KB/s 00:00 但是,我在我的计算引擎实例中找不到它。它在~/project文件夹中不可见。是默默地失败了,还是我找错了地方?简短回答 很可能,您正在查找错误的$HOME。确保你在找 在您从中复制的同一用户的主目录中(将是 在远

我正在将数据从本地计算机复制到计算引擎实例:

gcloud compute copy files/Users/me/project/data.csv实例名称:~/project

该命令将运行并完成以下操作:

data.csv 100%   74KB  73.9KB/s   00:00
但是,我在我的计算引擎实例中找不到它。它在
~/project
文件夹中不可见。是默默地失败了,还是我找错了地方?

简短回答 很可能,您正在查找错误的
$HOME
。确保你在找 在您从中复制的同一用户的主目录中(将是 在远程主机上创建(如果以前不存在)

回答不那么简短 如果在调用
copy files
时未指定任何远程用户,则
gcloud
将尝试确定使用哪个用户登录。你可以看到,如果 您可以查看
gcloud
源代码:

#$CLOUD\u SDK\u ROOT/lib/surface/compute/copy\u files.py
# [...]
用户\主机,文件\路径=arg.split(“:”,1)
user_host_parts=user_host.split('@',1)
如果len(用户\主机\部件)==1:
user=ssh\u utils.GetDefaultSshUsername(警告\u帐户\u user=True)
实例=用户\主机\部件[0]
其他:
用户,实例=用户\主机\部件
# [...]
在您的情况下,由于没有指定任何用户,
GetDefaultSshUsername()
将被调用,其任务是为 使用。为此,它将选择符合以下条件的第一个选项 订单:

  • 如果当前
    $USER
    在GCE特定约束下有效,即, 不包含空格的ASCII字符
  • 否则,请从当前记录的
    gcloud
    帐户中提取用户名 在中(您可以通过运行
    gcloud auth list
    来检查它是哪一个)
  • 源代码再一次告诉了我们最终的真相:

    #$CLOUD\u SDK\u ROOT/lib/googlecloudsdk/api\u lib/compute/ssh\u utils.py
    def GetDefaultSshUsername(帐户上警告用户=False):
    # [...]
    user=getpass.getuser()
    如果没有_IsValidSshUsername(用户):
    完整帐户=properties.VALUES.core.account.Get(必需=True)
    account\u user=gaia\u utils.MapGaiaEmailToDefaultAccountName(完整帐户)
    如果在用户帐户上警告用户:
    log.warn('本地用户名[{0}]中的字符无效。'
    '使用与活动帐户[{1}]对应的用户名'。格式(用户,帐户\用户))
    用户=帐户\用户
    返回用户
    
    现在我们知道了选择远程用户名的过程 是的,我的猜测是您使用 与稍后检查远程实例时使用的用户不同 如果文件在那里,因为默认情况下,它们将在
    各自的和不同的–
    $HOME
    目录。

    您确定使用复制文件时在本地计算机上使用的相同用户名登录GCE实例吗?您的文件很可能位于您的实例上,但位于不同的/home/下,这就是问题所在。我需要补充一点user@instance让它工作。谢谢请随意添加这一点作为答案。好的,完成-并进行扩展解释;-)