如何使用gsutil删除gcs中除1之外的多个文件

How to delete multiple files in gcs except 1 using gsutil

我目前有这个:gsutil ls gs://basty/*_TZ001.*

gs://basty/20201007_TZ001.csv
gs://basty/20201008_TZ001.csv
gs://basty/20201009_TZ001.csv

我的问题是我的 bcuket 有很多文件我想删除除 1 (20201009_TZ001.csv)

之外的所有文件

我想使用 bash 或 python 我不知道。

您可以使用 grep 过滤结果(使用 -v 标志反转结果)和管道 xargs

gsutil ls gs://basty/*_TZ001.* |\
  grep -v 20201009_TZ001.csv |\
  xargs -i{} gsutil rm {}

为确保这正是您想要的,您可以先执行 dry-run 命令:

gsutil ls gs://basty/*_TZ001.* |\
  grep -v 20201009_TZ001.csv |\
  xargs -i{} echo "Will delete: " {}

我有另一个解决方案。这个是基于 temporary holds。我建议您在存储桶内创建一个新文件夹。然后,像这样添加一个临时保留:

gsutil -m  retention temp set gs://BUCKETNAME/FOLDER/

然后,将您不想删除的所有文件添加到此文件夹

执行命令:

gsutil rm gs://BUCKET/*

您将看到如何跳过 文件夹删除所有文件。

最后,取消保留:

gsutil -m  retention temp release  gs://BUCKETNAME/FOLDER/

还有一种解决方法

gsutil ls -r gs://basty/*_TZ001.* | grep -v 20201009_TZ001.csv | gsutil -m rm -I
  • 它工作得非常快,因为它同时删除文件而不是一个一个地删除文件(命令中的 -m 选项)
  • 它不使用使整个操作变慢的保留
  • 如果将 gs://basty/*_TZ001.* 替换为 gs://basty/**
  • ,它适用于存储桶文件结构中任何级别的文件