Amazon s3 将本地文件夹结构同步到s3根结构
在我的管道中,我试图将本地文件夹(或者应该说是存储库文件夹)同步到s3存储桶。现在我可以进行aws s3同步了。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可能有些过分,因为我只想从根目录复制(
- bucket1/file1.txt
- bucket1/file2.txt
- bucket1/subbucket1/file3.txt
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,但没有“文件夹”(您可以将文件复制到一个不存在的路径,这样就可以正常工作)。