我想使用 AWS S3 cli 将完整的目录结构复制到 S3 存储桶。
到目前为止,我尝试过的所有方法都将文件复制到存储桶中,但目录结构已崩溃。(换句话说,每个文件都被复制到存储桶的根目录中)
我使用的命令是:
aws s3 cp --recursive ./logdata/ s3://bucketname/
我还尝试过在源指定(即复制自参数)中省略尾部斜杠。我还使用通配符来指定所有文件...我尝试的每件事都只是将日志文件复制到存储桶的根目录中。
答案1
(改进解决方案希希尔)
- 将以下脚本保存在文件中(我将文件命名为
s3Copy.sh
)
path=$1 # the path of the directory where the files and directories that need to be copied are located
s3Dir=$2 # the s3 bucket path
for entry in "$path"/*; do
name=`echo $entry | sed 's/.*\///'` # getting the name of the file or directory
if [[ -d $entry ]]; then # if it is a directory
aws s3 cp --recursive "$name" "$s3Dir/$name/"
else # if it is a file
aws s3 cp "$name" "$s3Dir/"
fi
done
- 按如下方式运行:
/PATH/TO/s3Copy.sh /PATH/TO/ROOT/DIR/OF/SOURCE/FILESandDIRS PATH/OF/S3/BUCKET
例如,如果s3Copy.sh
存储在主目录中,并且我想复制位于当前目录中的所有文件和目录,那么我运行以下命令:
~/s3Copy.sh . s3://XXX/myBucket
您可以轻松修改脚本以允许其他参数,s3 cp
如--include
,,--exclude
...
答案2
我相信同步是您想要的方法。请尝试以下方法:
aws s3 sync ./logdata s3://bucketname/
答案3
以下对我有用:
aws s3 cp ~/this_directory s3://bucketname/this_directory --recursive
然后,AWS 将“制作”this_directory
并将所有本地内容复制到其中。
答案4
使用以下脚本复制文件夹结构:
s3Folder="s3://xyz.abc.com/asdf";
for entry in "$asset_directory"*
do
echo "Processing - $entry"
if [[ -d $entry ]]; then
echo "directory"
aws s3 cp --recursive "./$entry" "$s3Folder/$entry/"
else
echo "file"
aws s3 cp "./$entry" "$s3Folder/"
fi
done