看起来很简单,但是语法不对。我想知道一个文件是否存在于我的s3桶使用通配符。就像
aws s3 ls s3://my-bucket/folder/*myfile*
目的是查看该bucket中是否存在一个名为2016_myfile.txt
或2011_myfile.csv
的文件。
如果我运行这个命令,即使我知道这个文件存在,它也不会返回任何东西。
aws s3 ls
不支持globs,但sync 支持并且有一个干运行模式。因此,如果你这样做(从一个空目录),你应该得到你想要的结果:
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
(从评论中重新起草,因为它似乎回答了这个问题)
我自己尝试过,但没有在aws-cli中使用通配符,根据文档,目前不支持。最简单(但效率最低)的解决方案是使用grep:
aws s3 ls s3://my-bucket/folder/ | grep myfile
或者,您可以编写一个简短的python/其他脚本来更有效地完成此操作(但不是在单个命令中)
S3不支持通配符列表。你需要列出所有的文件并对其执行grep。
aws s3 ls s3://mybucket/folder --recursive
上面的命令将给出文件夹下的文件列表,它也会搜索文件夹内的文件。只需grep你的文件名
aws s3 ls s3://mybucket/folder --recursive |grep filename
假设你想找到多个文件,创建一个正则表达式并grep它。
Windows用户:
aws s3 ls s3://my-bucket/folder/ | findstr myfile
2022更新:
您可以使用aws s3支持的--dry-run
选项:
aws s3 sync s3://my-bucket . --include "folder/*myfile*" --exclude "*" --dryrun
或者
s3cmd也适用于我的grep。
s3cmd ls --recursive s3://mybucket/folder/folder2 | grep filename