我在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中多次声明的字段名称
任何想法我在做什么错吗?
您的第一个示例失败,因为您正在列出对象,而不是打印出对象的内容。
您的第二个示例失败,因为您不能对S3请求使用通配符。
一种方法是在本地同步文件,然后grep本地文件,然后删除本地文件(或只是留在原处以优化将来的同步)。您可以使用aws s3 sync
执行此操作。
另一种选择是使用Athena查询JSON内容。例如,您可以使用SQL查询。
另一种选择是将文档上载到S3时创建搜索索引。您可以触发Lambda函数,该函数读取对象内容并将其索引到另一个S3对象,DynamoDB表或什至Elasticsearch(如果这是一个重要的系统)中。