我正在重新组织s3文件结构,并希望从本质上创建1000个子文件夹,因为我的所有文件都在一个目录中。对于示例,我将其简化为六个文件(这些文件将分成3个子文件夹)。
在终端中,以下命令仅对AAP子文件夹有效。
aws s3 mv --recursive --dryrun --exclude="*" --include="opt_AAP_*.gz" s3://my-so/files/ s3://my-so/files/AAP/
我明白了:
(dryrun) move: s3://my-so/files/opt_AAP_1570545425.json.gz to s3://my-so/files/AAP/opt_AAP_1570545425.json.gz
(dryrun) move: s3://my-so/files/opt_AAP_1570546225.json.gz to s3://my-so/files/AAP/opt_AAP_1570546225.json.gz
当我在以下脚本中创建此代码时,似乎完全忽略了exclude和include参数。即使阵列中只有3位数字标识符之一,它也要移动所有文件。其他帖子指出我在参数上使用引号,而其他帖子则指出了数组使用某些字符集的方式,但是我还没有弄清楚如何查看这是否是问题所在。这令人费解,因为我不想对数千个文件进行1000次手动操作。我可以使用python / boto3并在单个文件上执行复制/删除操作,但是我认为这是一种有效的手段,如果我能弄清楚发生了什么。非常感谢您的帮助。
Bash脚本(在Linux t3.micro AMI上:: >>
# declare an array variable declare -a arr=("AAP") # now loop through the above array for i in "${arr[@]}" do command=(aws s3 mv --recursive --dryrun --exclude=\"*\" --include=\"opt_"$i"_*.gz\" s3://my-so/files/ s3://my-so/files/"$i"/ ) echo "${command[@]}" "${command[@]}" & done
和不正确的空运行:
(dryrun) move: s3://my-so/files/opt_AAP_1570545425.json.gz to s3://my-so/files/AAP/opt_AAP_1570545425.json.gz
(dryrun) move: s3://my-so/files/opt_AAP_1570546225.json.gz to s3://my-so/files/AAP/opt_AAP_1570546225.json.gz
(dryrun) move: s3://my-so/files/opt_DFB_1530546225.json.gz to s3://my-so/files/AAP/opt_DFB_1530546225.json.gz
(dryrun) move: s3://my-so/files/opt_DFB_1540546225.json.gz to s3://my-so/files/AAP/opt_DFB_1540546225.json.gz
(dryrun) move: s3://my-so/files/opt_TRO_1570546225.json.gz to s3://my-so/files/AAP/opt_TRO_1570546225.json.gz
(dryrun) move: s3://my-so/files/opt_TRO_1570546226.json.gz to s3://my-so/files/AAP/opt_TRO_1570546226.json.gz
我正在重新组织s3文件结构,并希望从本质上创建1000个子文件夹,因为我的所有文件都在一个目录中。对于示例,我将其简化为六个文件(这些文件将是...
您应该将代码从“ $ 1”更改为$1