【问题标题】:aws cli rm when wild cards are needed需要通配符时的 aws cli rm
【发布时间】:2021-01-10 12:37:45
【问题描述】:

它在 aws cli 的文档中说不支持通配符。您可以使用 --include 和 --exclude 选项。但是当文件结构很宽时,这可能需要一段时间。

aws s3 rm s3://your-bucket/your-folder/year=2020/month=05/ --exclude "*" --include "*/provider=400/qk=0001" --include "*/provider=400/qk=0002" --include "*/provider=400/qk=0003" --include "*/provider=400/qk=0010" ...

那么还有哪些其他选择?

【问题讨论】:

  • “可能需要一段时间”是什么意思?您的意思是开始删除之前需要一些时间,还是因为它需要删除这么多对象?还是写命令太长?您只是想删除provider=400/ 下的所有内容吗?如果是这样,你不能只使用--include "*/provider=400/*"吗?
  • @JohnRotenstein 我在 provider=400 下有 100 个 qk 子键,我需要删除其中的 40 个。 --include 和 --exclude 确实 listObjects (我假设),每个 qk 大约有 200 个文件,一个月需要一段时间
  • 如果您需要有选择性(例如只删除某些子文件夹),那么您的方法很好。或者,您可以使用 AWS 开发工具包(例如 Python 脚本)的解决方案列出给定前缀下的内容,然后使用 delete_objects()。另一种方法是配置 Amazon S3 生命周期规则以删除对象,但我不确定它是否可以接受 40 个不同的子文件夹。不必担心删除对象所用的时间——您可以在一夜之间运行它,甚至可以在多个线程和实例上并行运行。欢迎来到大数据!

标签: amazon-web-services command-line-interface rm


【解决方案1】:

在 shell 终端中你可以做下一个技巧:

for i in `s3://your-bucket/your-folder/year=2020/month=05/day={01,02,03,04,05,06,07,08,09,10...}/provider=400/qk={0001,0002,0003,0010,...}; do aws s3 rm $i --recursive; done

【讨论】:

    猜你喜欢
    • 2019-08-31
    • 1970-01-01
    • 2022-06-24
    • 2012-05-21
    • 1970-01-01
    • 2021-08-31
    • 2018-10-24
    • 2020-10-06
    • 1970-01-01
    相关资源
    最近更新 更多