如何知道 GCP 存储桶中是否存在路径 "gs://bucket1/folder_x"
How to know path "gs://bucket1/folder_x" existing or not in GCP bucket
是否有“'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'”,但不能测试目录。
'''groovy
管道{
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 都存储在存储桶的根目录中,它们的名称由完整路径组成(带 / 你解释为目录,但不是)。也是因为这个,只能按前缀搜索。
要回答您的问题,您可以使用这个最新功能:搜索前缀。如果有 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())
是否有“'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'”,但不能测试目录。
'''groovy
管道{
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 都存储在存储桶的根目录中,它们的名称由完整路径组成(带 / 你解释为目录,但不是)。也是因为这个,只能按前缀搜索。
要回答您的问题,您可以使用这个最新功能:搜索前缀。如果有 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())