如果文件不存在,则无一例外地从 GCS 中删除
Delete from GCS without exception if file is not present
我正在通过 python 调用 shell 脚本。
在脚本中,我正在使用 gsutil rm
和 gsutil cp
命令。
但是只要这 2 个命令中的任何一个 运行 在不存在的 gcp 路径上,它就会出错。
例如:当我尝试时:
gsutil rm -r gs://some-bucket/somepath-not-present/
我收到一个错误:
CommandException: 1 files/objects could not be removed.
最后脚本的 return 代码是 1。即使我的代码执行得很好。我希望脚本在找不到路径时不会出错。
有没有办法绕过这个。我试过 linux 中的 ||
,但它似乎不起作用。
如果您在另一个可能受 gsutil
打印的异常影响的脚本中使用 gsutil
,您可以简单地尝试将 stderr 重定向到 /dev/null,如下所示:
gsutil rm -r gs://some-bucket/somepath-not-present/ 2> /dev/null
但是,请注意此时您将开始忽略命令生成的任何错误。如果你 echo $?
,你仍然会得到 1
的错误代码,它可以告诉你文件不存在或发生了其他异常。
编辑:
如果您想使用退出代码 0 退出脚本,您可以这样做
gsutil rm -r gs://some-bucket/somepath-not-present/ || exit 0
或者如果您只想将命令设为 return 0,您可以使用
gsutil rm -r gs://some-bucket/somepath-not-present/ || true
令我惊讶的是 Google 还没有解决这个问题。我遇到了同样的问题,我依赖构建脚本继续 运行,即使存储桶已经是空的。
我想出了以下解决方法:
if [[ $(gsutil du gs://my-bucket | wc -l) -gt 0 ]]; then gsutil -m rm -rf gs://my-bucket/*; fi
它基本上计算桶中对象的数量,并且仅在计数大于零时才运行gsutil rm
。
我正在通过 python 调用 shell 脚本。
在脚本中,我正在使用 gsutil rm
和 gsutil cp
命令。
但是只要这 2 个命令中的任何一个 运行 在不存在的 gcp 路径上,它就会出错。
例如:当我尝试时:
gsutil rm -r gs://some-bucket/somepath-not-present/
我收到一个错误:
CommandException: 1 files/objects could not be removed.
最后脚本的 return 代码是 1。即使我的代码执行得很好。我希望脚本在找不到路径时不会出错。
有没有办法绕过这个。我试过 linux 中的 ||
,但它似乎不起作用。
如果您在另一个可能受 gsutil
打印的异常影响的脚本中使用 gsutil
,您可以简单地尝试将 stderr 重定向到 /dev/null,如下所示:
gsutil rm -r gs://some-bucket/somepath-not-present/ 2> /dev/null
但是,请注意此时您将开始忽略命令生成的任何错误。如果你 echo $?
,你仍然会得到 1
的错误代码,它可以告诉你文件不存在或发生了其他异常。
编辑:
如果您想使用退出代码 0 退出脚本,您可以这样做
gsutil rm -r gs://some-bucket/somepath-not-present/ || exit 0
或者如果您只想将命令设为 return 0,您可以使用
gsutil rm -r gs://some-bucket/somepath-not-present/ || true
令我惊讶的是 Google 还没有解决这个问题。我遇到了同样的问题,我依赖构建脚本继续 运行,即使存储桶已经是空的。
我想出了以下解决方法:
if [[ $(gsutil du gs://my-bucket | wc -l) -gt 0 ]]; then gsutil -m rm -rf gs://my-bucket/*; fi
它基本上计算桶中对象的数量,并且仅在计数大于零时才运行gsutil rm
。