如何从远程服务器复制文件到Google Cloud Storage?已尝试方法均失败求助
解决你的GSutil与GCloud SSH文件传输问题
我来帮你一步步解决这两个文件传输的问题~
问题1:GCloud SSH带命令执行失败
你之前的命令里多了个不必要的反斜杠,导致shell解析出错,而且建议用双引号包裹命令内容避免特殊字符问题。修正后的命令应该是:
gcloud compute ssh user@ftp.example.com --zone my_zone --command="gsutil cp path/to/my_file gs://MY_BUCKET"
另外要注意两个关键点:
- 远程服务器上必须已经安装并配置好
gsutil(因为这条命令是在远程机器上执行的,不是你的本地终端) - 远程机器的账号得有访问目标GCS Bucket的权限,你可以先SSH到远程机器手动跑一遍
gsutil cp path/to/my_file gs://MY_BUCKET,确认权限没问题再用gcloud批量执行
问题2:GSutil复制HTTP目录报错
gsutil cp本身不支持直接复制整个HTTP目录,只能处理单个HTTP文件,所以你会收到“http未被识别”的错误。这里给你两个可行的解决方案:
方案1:复制单个已知文件
如果知道目录里具体的文件名,直接指定单个文件的HTTP URL即可:
gsutil cp http://example.com/dir1/target_file.txt gs://MY_BUCKET
方案2:递归复制整个目录
先用wget(或者curl)把整个HTTP目录下载到本地/可SSH的服务器上,再上传到GCS。比如:
# 递归下载目录,参数确保下载结构符合预期 wget -r -np -nH --cut-dirs=1 http://example.com/dir1/ # 上传整个目录到GCS gsutil cp -r dir1/ gs://MY_BUCKET
给你解释下wget的参数:
-r:开启递归下载模式-np:不会下载URL里的父级目录,避免下载多余内容-nH:不创建以域名命名的目录,文件直接下载到指定的dir1文件夹--cut-dirs=1:去掉URL里的dir1层级,保证本地目录结构和远程一致
额外建议:利用SSH权限简化操作
既然你有远程服务器的SSH权限,其实没必要走HTTP公开访问的路子——直接在远程服务器上操作本地文件上传到GCS会更高效安全,就是用问题1里修正后的命令就行,或者直接SSH进去手动执行gsutil cp命令,还能实时看到执行日志。
内容的提问来源于stack exchange,提问作者user11720680
相关产品推荐
相关产品推荐

