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:文件名、目录名或卷标语法不正确”

GSUTIL CP 使用文件大小

权限被拒绝的 gsutil cp 错误

如何在忽略 .git、.gitignore 等文件的同时执行 gsutil cp -R?

PHP创建嵌套目录

gsutil cp 通信问题