aws ls 仅列出具有特定模式和扩展名的文件夹内的文件

问题描述 投票:0回答:1

我有一个包含多个文件夹的存储桶,每个文件夹内都有多个文件。我只想列出名称中包含模式

.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
...
amazon-web-services file pattern-matching ls
1个回答
0
投票

根据我的经验,

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
有助于过滤客户端的对象,减少过多的本地处理。

希望这对您有所帮助,或者至少您可以从中得到启发。

© www.soinside.com 2019 - 2024. All rights reserved.