Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 将本地文件夹结构同步到s3根结构_Amazon S3 - Fatal编程技术网

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

Amazon s3 将本地文件夹结构同步到s3根结构,amazon-s3,Amazon S3,在我的管道中,我试图将本地文件夹(或者应该说是存储库文件夹)同步到s3存储桶。现在我可以进行aws s3同步了。s3://但由于未指定桶,因此此偏离路线会产生错误。但基本上这正是我想要的。我的文件夹结构在本地的具体情况;这就是我在S3中想要的 因此,本地: bucket1/file1.txt bucket1/file2.txt bucket1/subbucket1/file3.txt 需要精确到我的s3帐户的根。。。如何解决这个问题 顺便说一句;sync可能有些过分,因为我只想从根目录复制(

在我的管道中,我试图将本地文件夹(或者应该说是存储库文件夹)同步到s3存储桶。现在我可以进行aws s3同步了。s3://但由于未指定桶,因此此偏离路线会产生错误。但基本上这正是我想要的。我的文件夹结构在本地的具体情况;这就是我在S3中想要的

因此,本地:

  • bucket1/file1.txt
  • bucket1/file2.txt
  • bucket1/subbucket1/file3.txt
需要精确到我的s3帐户的根。。。如何解决这个问题

顺便说一句;
sync
可能有些过分,因为我只想从根目录复制(并覆盖!)到s3文件夹。(尚未)对删除等不感兴趣

我能做什么?

aws s3 sync命令需要一个bucket名称

因此,您需要编写一个脚本来提取bucket名称并将其插入
aws s3 sync
命令,或者您需要编写自己的程序来代替aws CLI使用

如果存储桶的数量有限,并且它们不会经常更改,则可以编写一个脚本,反复调用AWS CLI,例如:

aws s3 sync bucket1/ s3://bucket1/
aws s3 sync bucket2/ s3://bucket2/
etc.

如果有人问同样的问题:

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
脚本检索它能找到的所有文件; 然后它将检查根目录(相对于当前文件夹) 它将检查目录是否作为bucket存在。若否,;它将被创建。 然后每个文件都会被复制

因为我不知道根目录是否存在(作为bucket),所以我们必须手动检查它。 我无法使用
sync
,因为我可能没有现有的存储桶。 如果您确实知道根目录作为bucket存在;然后我会使用同步,一行对十行:请参见


不管怎么说,我就是这样

它可能是手动存储桶:请看“没有”邪恶:但需要几个步骤才能完成,这样我就可以提取存储桶名称;但是如果bucket名称还不存在,if现在就会失败。作为测试
aws s3同步。s3://bucketdoesnotexist test--exclude“*”--include“*.txt”
这是否意味着对于同步操作,bucket必须始终存在?我认为没有“桶”……是的,桶必须存在才能与之交互。有bucket,但没有“文件夹”(您可以将文件复制到一个不存在的路径,这样就可以正常工作)。