如何使用gsutil删除gcs中的多个文件,除了1
Posted
技术标签:
【中文标题】如何使用gsutil删除gcs中的多个文件,除了1【英文标题】:How to delete multiple files in gcs except 1 using gsutil 【发布时间】:2021-02-04 18:06:09 【问题描述】:我目前有这个: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 我不知道。
【问题讨论】:
【参考方案1】:您可以使用 grep 过滤结果(使用 -v 标志来反转结果)和使用 xargs
的管道gsutil ls gs://basty/*_TZ001.* |\
grep -v 20201009_TZ001.csv |\
xargs -i gsutil rm
为了确保这正是您想要的,您可以先执行一个空运行命令:
gsutil ls gs://basty/*_TZ001.* |\
grep -v 20201009_TZ001.csv |\
xargs -i echo "Will delete: "
【讨论】:
我在 MacOS 上测试时收到illegal option -- i
。如果 xargs 标志更改为 -I
【参考方案2】:
我有另一个解决方案。这个基于temporary holds。我建议您在存储桶内创建一个新文件夹。然后,在其中添加一个临时保留,如下所示:
gsutil -m retention temp set gs://BUCKETNAME/FOLDER/
然后,将您不想删除的所有文件添加到此文件夹。
执行命令:
gsutil rm gs://BUCKET/*
您将看到如何跳过FOLDER删除所有文件。
最后,解除持有:
gsutil -m retention temp release gs://BUCKETNAME/FOLDER/
【讨论】:
【参考方案3】:还有一个解决方案
gsutil ls -r gs://basty/*_TZ001.* | grep -v 20201009_TZ001.csv | gsutil -m rm -I
它的工作速度非常快,因为它同时删除文件,而不是一一删除(命令中的 -m 选项)
它不使用让整个操作变慢的保持
如果将gs://basty/*_TZ001.*
替换为gs://basty/**
,它适用于存储桶文件结构中任何级别的文件
【讨论】:
以上是关于如何使用gsutil删除gcs中的多个文件,除了1的主要内容,如果未能解决你的问题,请参考以下文章
Gsutil - 如何使用 Gsutil 检查 GCS 存储桶(子目录)中是不是存在文件
从 GCS 中删除文件:“gsutil -m rm”引发 CommandException:无法删除文件/对象