如何知道 GCP 存储桶中是否存在路径“gs://bucket1/folder_x”

时间:2021-02-28 14:33:14

标签: google-cloud-platform bucket gsutil

是否有 '''gsutil''' 命令可以告诉我路径 '''gs://bucket1/folder1_x/folder2_y/''' 是否存在? gsutil 中有 '''ping''' 命令吗? 我使用Jenkins参数folder_x和folder_y,它们的值由用户输入,并通过管道加入。目前,如果目录确实存在,管道将显示成功。但是如果路径错误,管道就会中断并显示失败。

尝试使用 gsutil stat 和 gsutil -q stat,它可以测试 '''gs://bucket1/folder1_x/folder2_y/file1''',但不能测试目录。

'''时髦

管道{

stages {

    stage('Check existing dirs') {

        steps {
            script{

                if (params['Action'] =="List_etl-output") {

                    def Output_Data="${params['Datasource']}".toString().split(",").collect{"\"" + it + "\""}
                    def Output_Stage="${params['Etl_Output_Stage']}".toString().split(",").collect{"\"" + it + "\""}
                    for (folder1 in Output_Data) {
                        for (folder2 in Output_Stage) {
                        sh(script:  """

                           gsutil ls -r gs://bucket1/*/$Data/$Stage
                          
                      """ )

                    }
                }
            }
        }
      }
    }

} }

'''

我使用 gsutil 检查路径 gs://bucket1/*/$Data/$Stage 是否可用。 $Data 和 $Stage 由用户输入给出,当路径不可用时 Jenkins 管道中断。我希望 gsutil 在不可用时可以跳过错误的路径。

1 个答案:

答案 0 :(得分:2)

该目录在 Cloud Storage 中不存在。这是一个图形表示。所有 blob 都存储在存储桶根目录中,它们的名称由完整路径组成(您将 / 解释为目录,但不是)。为此,您只能搜索前缀。

要回答您的问题,您可以使用此最新功能:搜索前缀。如果有 1 个元素,则该文件夹存在,因为至少有 1 个带有此前缀的 blob。这里有一个 Python 的例子(我不知道你的语言,如果你需要,我可以用多种语言改编)

    from google.cloud import storage
    client = storage.Client()
    bucket = client.get_bucket('bucket1')
    if len(list(bucket.list_blobs(prefix='folder_x/'))):
      print('there is a file in the "directory"')
    else:
      print('No file with this path, so no "directory"')


这里是 Groovy 中的例子

import com.google.cloud.storage.Bucket
import com.google.cloud.storage.Storage
import com.google.cloud.storage.StorageOptions

Storage storage = StorageOptions.getDefaultInstance().service
Bucket bucket = storage.get("bucket1")

System.out.println(bucket.list(Storage.BlobListOption.prefix("folder_x/")).iterateAll().size())
相关问题