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 输出: 有人告诉我,我需要使用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脚本时,我收到一个错误:
我用另一个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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |