This stackoverflow answer helped a lot.但是,我想搜索给定存储桶中的所有PDF。
*.pdf
Enter
什么都没发生。有没有办法使用通配符或正则表达式通过在线S3 GUI控制台过滤桶搜索结果?
答案 0 :(得分:15)
正如评论中所述,亚马逊的用户界面只能用于根据自己的文档按前缀搜索:
http://docs.aws.amazon.com/AmazonS3/latest/UG/searching-for-objects-by-prefix.html
还有其他搜索方法,但需要付出一些努力。仅举两个选项,AWS-CLI应用程序或Boto3用于Python。
我知道这篇文章已经过时了,但它在Google的s3搜索列表中很高,并且没有接受的答案。 Harish的另一个答案是链接到一个死网站。
答案 1 :(得分:5)
AWS CLI搜索: 在AWS Console中,我们只能搜索目录中的对象,但不能搜索整个目录中的对象,也只能搜索文件的前缀名称(S3搜索限制)。
最好的方法是在Linux OS中使用AWS CLI with below命令
aws s3 ls s3:// bucket_name / --recursive | grep search_word |切-c 32-
使用通配符搜索文件 aws s3 ls s3:// bucket_name / --recursive | grep * .pdf
答案 2 :(得分:2)
如果在Python中使用boto3,则找到文件非常容易。将'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)
答案 3 :(得分:2)
您可以将复制功能与-DuniqueVersion=false
标志一起使用:
--dryrun
它将显示所有为PDF的文件。
答案 4 :(得分:0)
我已经在我的一个项目中使用了它,但是有点硬编码
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]])
答案 5 :(得分:0)
使用Java SDK的文档建议可以做到这一点:
https://docs.aws.amazon.com/AmazonS3/latest/dev/ListingKeysHierarchy.html https://docs.aws.amazon.com/AmazonS3/latest/dev/ListingObjectKeysUsingJava.html
具体来说,函数listObjectsV2Result
允许您指定前缀过滤器,例如“ files / 2020-01-02 *”,因此您只能返回与今天的日期匹配的结果。
答案 6 :(得分:0)
我猜这些文件是从 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。