使用ls和通配符检查s3中是否存在文件



看起来很简单,但是语法不对。我想知道一个文件是否存在于我的s3桶使用通配符。就像

aws s3 ls s3://my-bucket/folder/*myfile*

目的是查看该bucket中是否存在一个名为2016_myfile.txt2011_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

相关内容

  • 没有找到相关文章

最新更新