Gsutil - 如何使用Gsutil检查GCS存储桶(子目录)中是否存在文件

时间:2015-03-30 22:24:11

标签: python google-cloud-storage gsutil

我有一个GCS存储桶,其中包含路径中的一些文件

GS://main-bucket/sub-directory-bucket/object1.gz

我想以编程方式检查子目录存储桶是否包含一个特定文件。我想用gsutil来做这件事。

怎么可以这样做?

5 个答案:

答案 0 :(得分:6)

您可以使用gsutil stat命令。

答案 1 :(得分:1)

使用gsutil stat命令。要访问具有更多文件数的子目录,请使用通配符(*)。

例如:

gsutil -q stat gs://some-bucket/some-subdir/*; echo $?

在你的情况下:

gsutil -q stat gs://main-bucket/sub-directory-bucket/*; echo $?

结果 0 表示存在; 1 表示不存在

答案 2 :(得分:0)

还有gsutil lshttps://cloud.google.com/storage/docs/gsutil/commands/ls

例如

gsutil ls gs://my-bucket/foo.txt

输出是相同的文件路径或“ CommandException: One or more URLs matched no objects.

答案 3 :(得分:0)

如果出于某种原因要根据该列表的结果执行某项操作(例如,如果目录中有拼花文件,则加载bq表):

gsutil -q stat gs://dir/*.parquet; if [ $? == 0 ]; then bq load ... ; fi

答案 4 :(得分:0)

如果您的脚本允许使用非零退出代码,则:

#!/bin/bash

file_path=gs://main-bucket/sub-directory-bucket/object1.gz
gsutil -q stat $file_path
status=$?

if [[ $status == 0 ]]; then
  echo "File exists"
else
  echo "File does not exist"
fi

但是,如果您的脚本设置为因错误而失败,那么您将无法使用退出代码。这是另一种解决方案:

#!/bin/bash
trap 'exit' ERR

file_path=gs://main-bucket/sub-directory-bucket/object1.gz
result=$(gsutil -q stat $file_path || echo 1)
if [[ $result != 1 ]]; then
  echo "File exists"
else
  echo "File does not exist"
fi