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

Bas*_* SN 3 python bash google-cloud-storage gsutil google-cloud-platform

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

gs://basty/20201007_TZ001.csv
gs://basty/20201008_TZ001.csv
gs://basty/20201009_TZ001.csv
Run Code Online (Sandbox Code Playgroud)

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

我以为使用 bash 或 python 我不知道。

Gon*_*heu 5

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

gsutil ls gs://basty/*_TZ001.* |\
  grep -v 20201009_TZ001.csv |\
  xargs -i{} gsutil rm {}
Run Code Online (Sandbox Code Playgroud)

为了确保这正是您想要的,您可以先执行一个试运行命令:

gsutil ls gs://basty/*_TZ001.* |\
  grep -v 20201009_TZ001.csv |\
  xargs -i{} echo "Will delete: " {}
Run Code Online (Sandbox Code Playgroud)

  • 我在 MacOS 上测试时收到“非法选项 -- i”。如果 [**xargs**](https://man7.org/linux/man-pages/man1/xargs.1.html) 标志更改为 `-I` 则有效 (2认同)

And*_*lle 5

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

gsutil -m  retention temp set gs://BUCKETNAME/FOLDER/
Run Code Online (Sandbox Code Playgroud)

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

执行命令:

gsutil rm gs://BUCKET/*
Run Code Online (Sandbox Code Playgroud)

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

最后,删除保留:

gsutil -m  retention temp release  gs://BUCKETNAME/FOLDER/
Run Code Online (Sandbox Code Playgroud)