使用ls和wildcard检查s3中是否存在文件

时间:2016-10-04 16:52:04

标签: amazon-s3 aws-cli

似乎很简单,但没有正确的语法。我想知道我的s3存储桶中是否存在使用通配符的文件。像

这样的东西
aws s3 ls s3://my-bucket/folder/*myfile*

目标是查看此存储桶中是否存在名为2016_myfile.txt的文件或名为2011_myfile.csv的文件。

如果我运行该命令,即使我知道该文件存在,它也不会返回任何内容。

5 个答案:

答案 0 :(得分:14)

(从评论中重新起草,因为它似乎回答了这个问题)

我自己尝试了,并且未能在aws-cli中使用通配符,并且根据docs,目前不支持此功能。 最简单(但效率最低)的解决方案是使用grep:

aws s3 ls s3://my-bucket/folder/ | grep myfile

或者,您可以编写一个简短的python /其他脚本来更有效地执行此操作(但不能在单个命令中)

答案 1 :(得分:12)

aws s3 ls不支持全局,但同步支持,并且具有空运行模式。因此,如果您这样做(从一个空目录),您应该得到想要的结果:

aws s3 sync s3://my-bucket . --exclude "*" --include "folder/*myfile*" --dryrun

它将为匹配的文件生成如下行:

(dryrun) download s3://my-bucket/folder/myfile.txt to folder/myfile.txt
(dryrun) download s3://my-bucket/folder/_myfile-foo.xml to folder/_myfile-foo.xml

答案 2 :(得分:5)

S3不支持通配符列表。您需要列出所有文件并进行grep。

aws s3 ls s3://mybucket/folder --recursive 

上面的命令会给出你文件夹下的文件列表,它也会搜索文件夹里面的文件。只需grep你的文件名

aws s3 ls s3://mybucket/folder --recursive |grep filename

假设您要查找多个文件,请创建这些文件的正则表达式并进行grep。

答案 3 :(得分:1)

s3cmd对我来说也适用于grep。

s3cmd ls --recursive s3://mybucket/folder/folder2 | grep filename

答案 4 :(得分:0)

对于Windows用户:

aws s3 ls s3://my-bucket/folder/ | findstr myfile