似乎很简单,但没有正确的语法。我想知道我的s3存储桶中是否存在使用通配符的文件。像
这样的东西aws s3 ls s3://my-bucket/folder/*myfile*
目标是查看此存储桶中是否存在名为2016_myfile.txt
的文件或名为2011_myfile.csv
的文件。
如果我运行该命令,即使我知道该文件存在,它也不会返回任何内容。
答案 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