如何使用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/**
,它适用于存储桶文件结构中任何级别的文件
我目前有这个: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/**
,它适用于存储桶文件结构中任何级别的文件