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

age*_*ntv 60 amazon-s3 amazon-web-services

我想使用 AWS S3 cli 将完整的目录结构复制到 S3 存储桶。

到目前为止,我尝试过的所有操作都将文件复制到存储桶中,但目录结构已折叠。(换种说法,每个文件都复制到bucket根目录下)

我使用的命令是:

aws s3 cp --recursive ./logdata/ s3://bucketname/
Run Code Online (Sandbox Code Playgroud)

我也试过在我的源代码(即参数的副本)上去掉尾部斜杠。我还使用通配符来指定所有文件……我尝试的每件事都只是将日志文件复制到存储桶的根目录中。

Cha*_*ith 65

我相信同步是您想要的方法。试试这个:

aws s3 sync ./logdata s3://bucketname/
Run Code Online (Sandbox Code Playgroud)

  • ...我很高兴尝试这样做,但它给了我与 cp 命令相同的结果。我的 ./logfiles 目录中的文件被复制到存储桶中的根“目录”。确实有效的一件事是尝试这个:`aws s3 sync ./logdata s3://bucketname/logdata` 感谢您的领导。---v (8认同)

vik*_*027 17

我在使用这些命令时遇到了这个错误。

$ aws s3 cp --recursive /local/dir s3://s3bucket/
OR
$ aws s3 sync /local/dir s3://s3bucket/
Run Code Online (Sandbox Code Playgroud)

我什至想在本地安装 S3 存储桶,然后运行 ​​rsync,即使失败(或挂起几个小时),因为我有数千个文件。

最后,s3cmd像魅力一样工作。

s3cmd sync /local/dir/ --delete-removed s3://s3bucket/ --exclude="some_file" --exclude="*directory*"  --progress --no-preserve
Run Code Online (Sandbox Code Playgroud)

这不仅可以很好地完成工作并在控制台上显示相当详细的输出,而且还可以分段上传大文件。


小智 16

以下对我有用:

aws s3 cp ~/this_directory s3://bucketname/this_directory --recursive

然后 AWS 将“制作”this_directory并将所有本地内容复制到其中。


LoM*_*aPh 7

(改进Shishir的解决方案)

  • 将以下脚本保存在文件中(我将文件命名为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
Run Code Online (Sandbox Code Playgroud)
  • 按如下方式运行:
    /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, ...