tapitapi’s blog

1日1杯タピオカ!エンジニア

【AWS CLI】S3 sync コマンド: フォルダには効かない

$ aws s3 sync <source> <target> [--options]

上記で、<source>のファイル&フォルダを、S3バケットの<target>に同期します。

 

$ aws s3 sync <source> <target> --delete

上記のように--deleteオプションをつけると、

<source>に無いファイルは<target>から削除してくれるのですが、

フォルダには効かないことが分かりました。

(<source>に無いフォルダは、<target>からは削除されず、そのまま残されてしまう。)

 

解決方法:rmコマンドで全削除後、cpコマンドでコピーで対応

$ aws s3 rm <target> --recursive

$ aws s3 cp <source> <target> --recursive

 

--recursiveオプションで、サブディレクトリも削除やコピーの対象にします。

 

公式リファレンス

docs.aws.amazon.com

 

下記にPythonのコードも置いておくので、参考になれば。

*sourceフォルダをS3にコピーし、全ユーザにRead権限を付与する例

import subprocess as sp
import sys

res1 = sp.run(["aws", "s3", "rm", "destURL" "--recursive"], stdout=sp.PIPE)
res2 = sp.run(["aws", "s3", "cp", "source", ""destURL, "--recursive", "--acl", "public-read"], stdout=sp.PIPE)
sys.stdout.buffer.write(res1.stdout + res2.stdout)

 

以上ですーーー!

 

おやすみなさいぃぃ