将本地文件夹结构同步到s3根结构

时间:2019-02-27 19:33:15

标签: amazon-s3

在我的管道中,我试图将我的本地文件夹(或应该说存储库文件夹)同步到s3存储桶。现在我可以执行aws s3 sync . s3://了,但是由于未指定存储桶,因此这当然会产生错误。但基本上这正是我想要的。我的本地文件夹结构到底如何?是我在S3中想要的。

在本地:

  • bucket1 / file1.txt
  • bucket1 / file2.txt
  • bucket1 / subbucket1 / file3.txt

需要完全进入我的s3帐户的根...如何解决此问题?

btw; sync可能是一个过大的杀手,因为我只想从根目录复制(并覆盖!)到s3文件夹。 (尚未)对删除等感兴趣。

我该怎么办..?

2 个答案:

答案 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:。

反正就是我了!