我在s3存储桶中存储了数千个json文件,并且需要对字符串“名称”执行grep搜索。
我已经配置了AWS cli ok,因为我可以打印出存储桶中的所有文件(通过ls命令)。
我尝试了以下两个命令:
1)
aws s3 ls s3://training | grep 'name'
这什么都没发生
2)
aws s3 cp s3://training/*json - | grep 'name'
这给出了错误:
下载失败:s3:// training / * json至-发生错误(404) 调用HeadObject操作时:找不到
我知道字符串名称存在100%,因为它是在每个json中多次声明的字段名称
有什么想法我在做什么错吗?
答案 0 :(得分:0)
您的第一个示例失败,因为您正在列出对象,而不是打印出对象的内容。
您的第二个示例失败,因为您不能在S3请求中使用通配符。
执行此操作的一种方法是在本地同步文件,然后grep本地文件,然后删除本地文件(或只是留在原处以优化将来的同步)。您可以使用aws s3 sync
来完成此操作。
另一种选择是使用Athena查询JSON内容。例如,您可以使用SQL查询。
另一个选择是将文档上载到S3时创建搜索索引。您可以触发Lambda函数,该函数读取对象的内容并将其索引到另一个S3对象,DynamoDB表或什至是Elasticsearch(如果这是一个重要的系统)中。