AWS CLI S3仅针对所选文件进行同步?

Pau*_*uez 4 sync amazon-s3 amazon-web-services aws-cli

我需要同步两个AWS S3存储桶,但我只需要同步列表中的文件.这是场景:

BucketA:

File1.jpg Deleted  
File2.jpg Modified
File3.jpg Deleted
File4.jpg Modified
File5.jpg Modified
File6.jpg New
Run Code Online (Sandbox Code Playgroud)

BucketB:

File1.jpg 
File2.jpg 
File3.jpg 
File4.jpg 
File5.jpg 
Run Code Online (Sandbox Code Playgroud)

我正在寻找这样的命令:

aws s3 sync s3://BucketA s3://BucketB --delete --exclude "*" --include "File1.jpg;File2.jpg;File4.jpg"
Run Code Online (Sandbox Code Playgroud)

结果BucketB必须是这样的:

File1.jpg deleted
File2.jpg Modified
File3.jpg No changed
File4.jpg Modified
File5.jpg No changed
Run Code Online (Sandbox Code Playgroud)

任何的想法?

Joh*_*ein 6

看起来这是可以实现的,除了删除部分.

此命令sync仅包含指定的文件:

aws s3 sync s3://bucketA s3://bucketB --exclude "*" --include "File1.jpg" --include "File2.jpg" --include "File4.jpg"
Run Code Online (Sandbox Code Playgroud)

但是,该--delete参数似乎只查看参数BucketA中包含的文件--include,导致所有其他文件"不可见",因此从BucketB中删除.

这个命令:

aws s3 sync s3://bucketA s3://bucketB --delete --exclude "*" --include "File1.jpg" --include "File2.jpg" --include "File4.jpg"
Run Code Online (Sandbox Code Playgroud)

实际上删除除File2.jpg和之外的所有文件File4.jpg.因此,看起来您不能以预期的方式进行选择性删除.

这是一个测试以上所有内容的脚本:

aws s3 cp foo s3://bucketa/File1.jpg
aws s3 cp foo s3://bucketa/File2.jpg
aws s3 cp foo s3://bucketa/File3.jpg
aws s3 cp foo s3://bucketa/File4.jpg
aws s3 cp foo s3://bucketa/File5.jpg
aws s3 sync s3://bucketa s3://bucketb
aws s3 rm s3://bucketa/File1.jpg
aws s3 rm s3://bucketa/File3.jpg
aws s3 cp foo s3://bucketa/File6.jpg
aws s3 cp bar s3://bucketa/File2.jpg
aws s3 cp bar s3://bucketa/File4.jpg
aws s3 cp bar s3://bucketa/File5.jpg

aws s3 ls s3://bucketa
2015-07-23 08:50:44         49 File2.jpg
2015-07-23 08:50:49         49 File4.jpg
2015-07-23 08:50:53         49 File5.jpg
2015-07-23 08:50:20         24 File6.jpg

aws s3 ls s3://bucketb
2015-07-23 08:49:35         24 File1.jpg
2015-07-23 08:49:35         24 File2.jpg
2015-07-23 08:49:36         24 File3.jpg
2015-07-23 08:49:36         24 File4.jpg
2015-07-23 08:49:36         24 File5.jpg 

aws s3 sync s3://bucketa s3://bucketb --exclude "*" --include "File1.jpg" --include "File2.jpg" --include "File4.jpg"
Run Code Online (Sandbox Code Playgroud)

  • 我已经在一个真实案例中测试了这个解决方案,它是行不通的。带有 50 --include 的 AWS CLI 命令会冻结控制台。 (2认同)