gsutil cp 创建嵌套目录
Posted
技术标签:
【中文标题】gsutil cp 创建嵌套目录【英文标题】:gsutil cp creates nested directory 【发布时间】:2021-10-10 05:31:07 【问题描述】:我正在尝试将文件夹 (/data/out
) 从 Cloud Build 复制到 Google Cloud Storage:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:slim'
volumes:
- name: 'vol1'
path: '/data'
entrypoint: 'gsutil'
args:
- -m
- cp
- -r
- /data/out
- gs://mybucket/files
第一次运行时,/data/out 中的所有内容都会复制到存储桶中,这正是我想要的。
当我第二次运行它来覆盖/更新文件时,有一个文件夹/files/out
,所以新文件在mybucket/files/out/*
而不是mybucket/files/*
。
我该如何解决这个问题?
我尝试在再次复制之前添加另一个步骤以删除文件夹 (rm -r gs://mybucket/files
),但此步骤第一次失败,因为该文件夹尚不存在,导致构建失败/完全停止。
【问题讨论】:
【参考方案1】:感谢Cloud Build -> Google Cloud Storage: Question about downtimes at deployment time,终于可以使用rsync
而不是cp
了
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:slim'
id: copy
volumes:
- name: 'vol1'
path: '/data'
entrypoint: 'gsutil'
args:
- -m
- rsync
- -r
- -d
- /data/out/
- gs://mybucket/folder
【讨论】:
【参考方案2】:我将上一步中生成的本地文件夹复制到 GS 存储桶。随后构建运行并覆盖文件。
我用过:
- name: 'gcr.io/cloud-builders/gsutil'
args: [ 'cp', '-r',
'./public',
'gs://BUCKET_NAME/test' ]
【讨论】:
对我不起作用。创建一个包含文件的嵌套out/
文件夹,而不是直接复制。以上是关于gsutil cp 创建嵌套目录的主要内容,如果未能解决你的问题,请参考以下文章
`gsutil cp` 命令抛出“OSError:文件名、目录名或卷标语法不正确”