在我的管道中,我试图将我的本地文件夹(或应该说存储库文件夹)同步到s3存储桶。现在我可以执行aws s3 sync . s3://
了,但是由于未指定存储桶,因此这当然会产生错误。但基本上这正是我想要的。我的本地文件夹结构到底如何?是我在S3中想要的。
在本地:
需要完全进入我的s3帐户的根...如何解决此问题?
btw; sync
可能是一个过大的杀手,因为我只想从根目录复制(并覆盖!)到s3文件夹。 (尚未)对删除等感兴趣。
我该怎么办..?
答案 0 :(得分:0)
AWS Command-Line Interface (CLI) aws s3 sync
命令需要存储桶名称。
因此,您将需要编写一个脚本来提取存储桶名称并将其插入到aws s3 sync
命令中,或者您需要编写自己的程序来代替AWS CLI。< / p>
如果存储桶数量有限并且它们不经常更改,则可以编写重复调用AWS CLI的脚本,例如:
aws s3 sync bucket1/ s3://bucket1/
aws s3 sync bucket2/ s3://bucket2/
etc.
答案 1 :(得分:0)
如果有人遇到相同的问题:
for file in `find -type f`;
do
newFilename="${file#./}"
dirName=$ENVIRONMENT-$(dirname "$newFilename")
#get first part of dir (only root)
dirName="${dirName%%/*}"
echo bucket: $dirName
if aws s3api head-bucket --bucket "$dirName" 2>/dev/null; then
echo "bucket already exists"
else
if [[ $dirName == *"/"* ]]; then
echo $dirName
echo "This bucket is a subfolder and will not be created"
else
aws s3 mb s3://$dirName
fi
fi
aws s3 cp $newFilename s3://$ENVIRONMENT-$newFilename
done
脚本检索它可以找到的所有文件; 然后它将检查根目录(相对于当前文件夹) 它将检查目录是否作为存储桶存在。如果不;它将被创建。 然后将复制每个文件。
由于我不知道根目录是否存在(作为存储桶),因此我们必须手动对其进行检查。
我无法使用sync
,因为我可能没有现有的存储桶。
如果您知道您的根目录作为存储桶存在;那么我会使用同步,一支衬板vs 10衬套:see_no_evil:。
反正就是我了!