AWS CLI mv无法识别bash脚本中的排除包含参数

问题描述 投票:0回答:1

我正在重新组织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

和不正确的空运行:

  • AAP文件应转到文件/ AAP /
  • DFB文件应转到文件/ DFB /
  • TRO文件应转到文件/ TRO /
(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个子文件夹,因为我的所有文件都在一个目录中。对于示例,我将其简化为六个文件(这些文件将是...

bash amazon-web-services command-line-interface
1个回答
0
投票

您应该将代码从“ $ 1”更改为$1

© www.soinside.com 2019 - 2024. All rights reserved.