如何从aws s3 sync命令中排除文件夹

Mic*_*lls 5 bash shell amazon-web-services jenkins-cli aws-cli

我们有一个aws s3 sync命令,该命令通过Jenkins execute shell将数据从bitbucket同步到s3。下面是s3存储桶结构

cdn-accountname > qa > sitename > cdn > img
cdn-accountname > qa > sitename > cdn > css
cdn-accountname > qa > sitename > cdn > png
Run Code Online (Sandbox Code Playgroud)

我们使用以下命令将CDN内容从bitbucket同步到s3

aws s3 sync cdn/ s3://cdn-accountname/qa/sitename
Run Code Online (Sandbox Code Playgroud)

我想在CDN /文件夹中排除“ / upload”和“ / upload_qa”文件夹,并将其同步到s3。我尝试了以下命令,但没有一个起作用

aws s3 sync --exclude "cdn/upload" --exclude "cdn/upload_qa" cdn/ s3://cdn-accountname/qa/sitename
aws s3 sync --exclude=cdn/upload --exclude=cdn/upload_qa cdn/ s3://cdn-accountname/qa/sitename
aws s3 sync --exclude "*/upload/*" --exclude "*/upload_qa/*" cdn/ s3://cdn-accountname/qa/sitename
aws s3 sync --exclude 'upload/*' --exclude 'upload_qa/*' cdn/ s3://cdn-accountname/qa/sitename 
aws s3 sync cdn/ s3://cdn-accountname/qa/sitename --exclude 'upload/*' --exclude 'upload_qa/*'
aws s3 sync cdn/ s3://cdn-accountname/qa/sitename --exclude "cdn/upload" --exclude "cdn/upload_qa"
aws s3 sync cdn/ s3://cdn-accountname/qa/sitename --exclude=cdn/upload --exclude=cdn/upload_qa
aws s3 sync cdn/ s3://cdn-accountname/qa/sitename --exclude "*/upload/*" --exclude "*/upload_qa/*" 
Run Code Online (Sandbox Code Playgroud)

建议可行的s3 sync命令同步文件夹(不包括子文件夹)

tkw*_*rgs 3

我相信您还需要--include在命令中使用该标志(请参阅文档以供参考)

aws s3 sync --include "*" --exclude "upload/*" --exclude "upload_qa/*" cdn/ s3://cdn-accountname/qa/sitename
Run Code Online (Sandbox Code Playgroud)

注意顺序

当有多个过滤器时,规则是命令中较晚出现的过滤器优先于命令中较早出现的过滤器

对此进行了测试并且工作正常

home [~]: aws s3 ls s3://abc-fe-testing1
                           PRE folder1/
                           PRE folder2/
                           PRE folder3/
                           PRE folder4/
home [~]: aws s3 ls s3://abc-fe-testing2
home [~]: aws s3 sync s3://abc-fe-testing1 s3://abc-fe-testing2 --exclude "folder1*" --exclude "folder2*"
copy: s3://abc-fe-testing1/folder4/file_from_folder4.txt to s3://abc-fe-testing2/folder4/file_from_folder4.txt
copy: s3://abc-fe-testing1/folder3/file_from_folder3.txt to s3://abc-fe-testing2/folder3/file_from_folder3.txt
home [~]: aws s3 ls s3://abc-fe-testing2
                           PRE folder3/
                           PRE folder4/
Run Code Online (Sandbox Code Playgroud)