Vir*_*rat 7 google-cloud-storage gsutil
我想务实地检查特定的谷歌云存储桶中是否存在对象。根据对象可用性,我将执行进一步的操作。
我已经浏览了https://cloud.google.com/storage/docs/gsutil/commands/stat和 doc 提到“ gsutil -q ”对于编写脚本很有用,因为现有对象的退出状态为 0 和 1对于一个不存在的对象。但是当我使用命令时它不能正常工作。请让我知道是否有人以前尝试过这个?
#!/bin/bash
gsutil -q stat gs://<bucketname>/object
return_value=$?
if [ $return_value != 0 ]; then
echo "folder exist"
else
echo "folder does not exist"
fi
Run Code Online (Sandbox Code Playgroud)
我看到您已经找到了问题的答案,但是,我将在此处发布此答案,以便提供有关gsutil stat命令如何工作以及您的代码为何不起作用的更多背景信息。
gsutil是一个 Python 应用程序,用于使用命令行界面访问和使用 Cloud Storage。它有许多可用的命令,您使用的一个是gsutil stat,它输出对象的元数据,检索尽可能少的数据,而不必列出存储桶中的所有对象。此命令也具有很强的一致性,这使其成为某些类型应用程序的合适解决方案。
使用该gsutil stat gs://<BUCKET_NAME>/<BUCKET_OBJECT>命令,返回如下内容:
gs://<BUCKET_NAME>/<BUCKET_OBJECT>.png:
Creation time: Tue, 06 Feb 2018 14:49:58 GMT
Update time: Tue, 06 Feb 2018 14:49:58 GMT
Storage class: MULTI_REGIONAL
Content-Length: 6119
Content-Type: image/png
Hash (crc32c): <CRC32C_HASH>
Hash (md5): <MD5_HASH>
ETag: <ETAG>
Generation: <TIMESTAMP>
Metageneration: 1
Run Code Online (Sandbox Code Playgroud)
但是,如果您使用 运行它-q,0如果对象存在或1不存在,它将返回,这使得编写脚本(例如您共享的脚本)很有趣。
最后,在使用存储桶内的子目录时,您必须考虑一些额外的注意事项:
gsutil -q stat gs://my_bucket/my_subdirectory将检索名为 的对象的数据my_subdirectory,而不是目录本身的数据。gsutil -q stat gs://my_bucket/my_subdirectory/将在子目录本身上运行,而不是在嵌套文件上运行,因此它只会告诉您子目录是否存在(这就是您的代码失败的原因)。gsutil -q stat gs://my_bucket/my_subdirectory/my_nested_file.txt的方法来检索嵌套在子目录下的文件的元数据。因此,简而言之,您的问题是您没有正确定义路径。gsutil理解路径不是太敏感,但这种行为按预期工作,因为您可能会遇到以下情况,您有一个同名的文件和文件夹,您应该能够检索它们中的任何一个,因此需要指定/指示它是目录还是文件的 :
gs://my_bucket/
|_ my_subdirectory #This is a file
|_ my_subdirectory/ #This is a folder
|_ my_nested_file.txt #This is a nested file
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7570 次 |
| 最近记录: |