将目录结构完整地复制到 AWS S3 存储桶

将目录结构完整地复制到 AWS S3 存储桶

我想使用 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

相关内容