加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – AWS S3:从复杂目录结构中的数千个文件中删除对象前缀

发布时间:2020-12-16 01:56:41 所属栏目:安全 来源:网络整理
导读:我使用AWS CLI界面来管理S3中的文件/对象.我有数千个对象埋在一个复杂的嵌套文件夹(子文件夹)系统中,我想将所有对象提升到S3存储桶的“根”,位于存储桶根目录的一个文件夹中(s3://存储桶) /folder/file.txt). 我尝试过使用这个命令: aws s3 s3://bucket-a/
我使用AWS CLI界面来管理S3中的文件/对象.我有数千个对象埋在一个复杂的嵌套文件夹(子文件夹)系统中,我想将所有对象提升到S3存储桶的“根”,位于存储桶根目录的一个文件夹中(s3://存储桶) /folder/file.txt).

我尝试过使用这个命令:

aws s3 s3://bucket-a/folder-a s3://bucket-a --recursive --exclude “*” --include “*.txt”

当我使用mv命令时,它会携带每个对象的前缀(目录路径),从而生成相同的嵌套文件夹系统.这是我想要完成的:

期望的结果:
哪里:

s3://bucket-a/folder-a/file-1.txt
s3://bucket-a/folder-b/folder-b1/file-2.txt
s3://bucket-a/folder-c/folder-c1/folder-c2/ file-3.txt

输出:
S3://bucket-a/file-1.txt
S3://bucket-a/file-2.txt
S3://bucket-a/file-3.txt

有人告诉我,我需要使用bash脚本来完成我想要的结果.这是一个提供给我的示例脚本:

#!/bin/bash
#BASH Script to move objects without directory structure
bucketname='my-bucket'
for key in $(aws s3api list-objects --bucket "${my-bucket}" --query "Contents[].{Object:Key}" --output text) ;
  do
    echo "$key"
    FILENAME=$($key | awk '{print $NF}' FS=/)
    aws s3 cp s3://$my-bucket/$key s3://$my-bucket/my-folder/$FILENAME
  done

当我运行这个bash脚本时,我收到一个错误:

A client error (AccessDenied) occurred when calling the ListObjects operation: Access Denied

我用另一个aws s3命令测试了连接并确认它有效.我向用户添加了一些策略,将所有权限包含在s3中,我不知道我在这里做错了什么.

任何帮助将不胜感激.

解决方法

该脚本看起来搞砸了,没有办法设置一个名为bucketname的变量,并试图使用另一个名为my-bucket的变量,如果你试试这个怎么办?

#!/bin/bash
#BASH Script to move objects without directory structure
bucketname='my-bucket'
for key in $(aws s3api list-objects --bucket "${bucketname}" --query "Contents[].{Object:Key}" --output text) ;
  do
    echo "$key"
    FILENAME=$($key | awk '{print $NF}' FS=/)
    aws s3 cp s3://$bucketname/$key s3://$bucketname/my-folder/$FILENAME
  done

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读