Amazon web services 如何使用通配符搜索AmazonS3存储桶?

Amazon web services 如何使用通配符搜索AmazonS3存储桶?,amazon-web-services,amazon-s3,filtering,Amazon Web Services,Amazon S3,Filtering,但是,我想搜索给定bucket中的所有PDF 我点击“无” 开始打字 I键入*.pdf 按Enter 什么也没发生。有没有办法使用通配符或正则表达式通过在线S3 GUI控制台过滤bucket搜索结果?如评论中所述,Amazon的UI只能用于根据其自己的文档按前缀进行搜索: 还有其他的搜索方法,但它们需要一些努力。仅举两个选项,application或for Python 我知道这篇文章很旧,但它在谷歌的s3搜索列表中排名靠前,没有一个被接受的答案。哈里什的另一个答案是链接到一个死点 更新202

但是,我想搜索给定bucket中的所有PDF

  • 我点击“无”
  • 开始打字
  • I键入
    *.pdf
  • Enter

  • 什么也没发生。有没有办法使用通配符或正则表达式通过在线S3 GUI控制台过滤bucket搜索结果?

    如评论中所述,Amazon的UI只能用于根据其自己的文档按前缀进行搜索:

    还有其他的搜索方法,但它们需要一些努力。仅举两个选项,application或for Python

    我知道这篇文章很旧,但它在谷歌的s3搜索列表中排名靠前,没有一个被接受的答案。哈里什的另一个答案是链接到一个死点


    更新2020/03/03:上述AWS链接已删除。这是一个链接,指向一个非常相似的主题,这是我能找到的最接近的主题

    AWS CLI搜索: 在AWS控制台中,我们只能搜索目录中的对象,而不能搜索整个目录中的对象,也就是说,只能使用文件的前缀名(S3搜索限制)

    最好的方法是在Linux操作系统中使用AWS CLI和以下命令

    aws s3 ls s3://bucket_name/ --recursive | grep search_word | cut -c 32- 
    
    使用通配符搜索文件
    aws s3 ls s3://bucket_name/--recursive | grep*.pdf

    如果在Python中使用boto3,则很容易找到文件。将“bucket”替换为bucket的名称

    import boto3
    s3 = boto3.resource('s3')
    bucket = s3.Bucket('bucket')
    for obj in bucket.objects.all():
        if '.pdf' in obj.key:
            print(obj.key)
    

    您可以使用带有
    --dryrun
    标志的复制功能:

    aws s3 ls s3://your bucket/any prefix/\--recursive--exclude*--include*.pdf--dryrun
    

    它将显示所有PDF文件。

    我在我的一个项目中使用过它,但它有点硬编码

    import subprocess
    bucket = "Abcd"
    command = "aws s3 ls s3://"+ bucket + "/sub_dir/ | grep '.csv'"
    listofitems = subprocess.check_output(command, shell=True,)
    listofitems = listofitems.decode('utf-8')
    print([item.split(" ")[-1] for item in listofitems.split("\n")[:-1]])
    

    使用Java SDK的文档建议可以这样做:

    具体而言,函数
    listObjectsV2Result
    允许您指定前缀过滤器,例如“files/2020-01-02*”,因此您只能返回与当前日期匹配的结果


    我猜这些文件是从unix系统上载的,您下载到windows,因此s3cmd无法保留不适用于NTFS的文件权限

    要搜索并获取文件,请尝试从目标目录执行此操作,或更改/到目标:

    for i in `s3cmd ls s3://bucket | grep "searchterm" | awk '{print $4}'`; do s3cmd sync --no-preserve $i ./; done
    

    这适用于windows中的WSL。

    请注意,在提出问题时,此文档不存在。请注意,此文档已不存在,并重定向到文档主页。还需要注意的是,不允许更丰富的搜索,并且只在当前控制台页面上对项目进行排序,这使得在S3控制台中无法找到内容。(一定要从控制台发送AWS反馈。)您能解释一下这将如何帮助我找到所有PDF吗?AWS s3 ls s3://bucket\u name/--recursive | grep*。pdfI获取未知选项:--递归这是因为@user2568374的想法是正确的,但示例是错误的。它应该是:
    aws s3 cp s3://your bucket/any prefix/--递归--exclude“*”--include“*.pdf”-dryrun
    比较AWS文档,似乎
    AWS s3 cp
    有一个通配符功能,就像Yossi在这里指出的那样,
    AWS s3 ls
    似乎没有通配符功能。令人沮丧的是,他们无法进行“后缀”,因为他们已经有了前缀变量。