Google cloud platform “如何知道路径”;gs://bucket1/folder_x";是否存在于GCP存储桶中

Google cloud platform “如何知道路径”;gs://bucket1/folder_x";是否存在于GCP存储桶中,google-cloud-platform,bucket,gsutil,Google Cloud Platform,Bucket,Gsutil,是否有“gsutil”命令可以告诉我路径“gs://bucket1/folder1_x/folder2_y/”是否存在?gsutil中是否有“ping”命令? 我使用Jenkins参数folder_x和folder_y,由用户输入值,并通过管道连接。当前,如果dir确实存在,管道将显示成功。但如果路径错误,管道将中断并显示故障 尝试使用gsutil stat和gsutil-q stat,它可以测试“gs://bucket1/folder1_x/folder2_y/file1”,但不能测试dir

是否有“gsutil”命令可以告诉我路径“gs://bucket1/folder1_x/folder2_y/”是否存在?gsutil中是否有“ping”命令? 我使用Jenkins参数folder_x和folder_y,由用户输入值,并通过管道连接。当前,如果dir确实存在,管道将显示成功。但如果路径错误,管道将中断并显示故障

尝试使用gsutil stat和gsutil-q stat,它可以测试“gs://bucket1/folder1_x/folder2_y/file1”,但不能测试dir

“太棒了

管道{

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可以在不可用时跳过错误路径。

云存储中不存在该目录。这是一种图形表示。所有blob都存储在to bucket root上,它们的名称由完整路径组成(使用/解释为directory,但不是directory)。也正因为如此,您只能在前缀上搜索

要回答您的问题,您可以使用此最新功能:搜索前缀。如果有1个元素,则文件夹存在,因为至少有1个具有此前缀的blob。这里是Python中的一个示例(我不知道您的语言,如果您需要,我可以用几种语言对其进行调整)


下面是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())

云存储中不存在该目录。这是一种图形表示。所有blob都存储在to bucket root上,它们的名称由完整路径组成(使用/解释为directory,但不是directory)。也正因为如此,您只能在前缀上搜索

要回答您的问题,您可以使用此最新功能:搜索前缀。如果有1个元素,则文件夹存在,因为至少有1个具有此前缀的blob。这里是Python中的一个示例(我不知道您的语言,如果您需要,我可以用几种语言对其进行调整)


下面是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())

需要注意的是,google存储中没有通常意义上的文件夹,当它使用一个平面名称空间时,会产生一种层次结构的错觉。你能做的是你可以尝试列出它,如果你得到一个例外-没有“文件夹”,否则如果列表只是“文件夹”本身-它是“空的”,否则如果列表有>=2个条目-它不是“空的”。只是注意,谷歌存储中没有通常意义上的文件夹,当它实际上使用一个平面名称空间时,它产生了一种层次结构的假象。你能做的是,你可以尝试列出它,如果你得到一个例外-没有“文件夹”,否则如果列表只是“文件夹”本身-它是“空的”,否则如果列表有>=2个条目-它不是“空的”。这里真的需要len()吗?如果有,它可能是
(bucket.list\u blobs(前缀=”folder\u x/')):
?首先,有一些商业工具可以创建0长度的对象来表示目录。对象元数据用于记录时间戳、权限、对象类型等@markzhu,我在Groovy中添加了一个示例。谢谢@guillaume blaquiere。你是天才。这里真的需要len()吗?如果有(bucket.list\u blobs(prefix='folder\u x/):?作为一个提示,有一些商业工具可以创建0长度的对象来表示目录。对象元数据用于记录时间戳、权限、对象类型等@markzhu,我在Groovy中添加了一个示例。谢谢@guillaume blaquiere。你是天才。