我有一个包含多个文件夹的存储桶,每个文件夹内都有多个文件。我只想列出名称中包含模式
.tsv
的文件夹中的 "*report_filtered_count10"
文件。
我能做到:
aws s3 ls s3://<my bucket> --recursive
但不是:
aws s3 ls s3://<my bucket>/*/*report_filtered_count10.tsv --recursive
我的解决方法是在本地使用
aws sync
,然后使用 ls
,如下所示:
aws s3 sync s3://<my bucket>/ tsv_files --exclude '*' --include '*report_filtered_count10.tsv'
ls tsv_files/*/*.tsv
...然后解析输出。
我也尝试了这个
aws sync
命名法与aws ls
,但它也不起作用:
aws s3 ls s3://<my bucket>/ --exclude '*' --include '*report_filtered_count10.tsv'
未知选项:--exclude,*,--include,*report_filtered_count10.tsv
知道如何完成这个简单的任务吗?我想要的输出是:
s3://<my bucket>/folder1/file1_report_filtered_count10.tsv
s3://<my bucket>/folder2/file2_report_filtered_count10.tsv
s3://<my bucket>/folder3/file3_report_filtered_count10.tsv
s3://<my bucket>/folder4/file4_report_filtered_count10.tsv
s3://<my bucket>/folder5/file5_report_filtered_count10.tsv
...
根据我的经验,
aws s3 ls
命令的过滤功能可能相当有限(我认为),而aws s3api
提供了更大的灵活性。对于这样的任务,我将结合使用 aws s3api list-objects-v2
命令和 grep
和 awk
。
因此您可以使用
aws s3api list-objects-v2
来获取有关对象的详细信息,从而可以进行更复杂的过滤。看起来像这样:
aws s3api list-objects-v2 --bucket <my-bucket> --query 'Contents[?ends_with(Key, `.tsv`)]' --output text
此命令列出了所有
.tsv
文件,但它尚未按您的特定模式过滤它们。
然后您可以将上述命令的输出通过管道传输到
grep
以过滤包含特定模式“*report_filtered_count10”的文件:
aws s3api list-objects-v2 --bucket <your-bucket> --query 'Contents[?ends_with(Key, `.tsv`)].Key' --output text | grep 'report_filtered_count10'
然后要将 S3 存储桶 URL 路径添加到输出的每一行前面,您可以使用
awk
:
aws s3api list-objects-v2 --bucket <your-bucket> --query 'Contents[?ends_with(Key, `.tsv`)].Key' --output text | grep 'report_filtered_count10' | awk '{print "s3://<my-bucket>/" $0}'
所以完整的命令将如下所示:
aws s3api list-objects-v2 --bucket <your-bucket> --query 'Contents[?ends_with(Key, `.tsv`)].Key' --output text | grep 'report_filtered_count10' | awk '{print "s3://<my-bucket>/" $0}'
此命令应以以下格式生成您期望的输出:
s3://<your-bucket>/folder1/file1_report_filtered_count10.tsv
s3://<your-bucket>/folder2/file2_report_filtered_count10.tsv
s3://<your-bucket>/folder3/file3_report_filtered_count10.tsv
...
在
--query
命令中使用aws s3api list-objects-v2
有助于过滤客户端的对象,减少过多的本地处理。
希望这对您有所帮助,或者至少您可以从中得到启发。