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

已解决:AWS CLI mv无法识别bash脚本中的排除包含参数,bash,amazon-web-services,command-line-interface,Bash,Amazon Web Services,Command Line Interface,注意:bash脚本现在正确了 我正在重新组织我的s3文件结构,并希望基本上创建1000个子文件夹,因为我的所有文件都在一个目录中。例如,我将其简化为6个文件(这些文件将被拆分为3个子文件夹) 在终端中,以下命令仅适用于AAP子文件夹 aws s3 mv --recursive --dryrun --exclude="*" --include="opt_AAP_*.gz" s3://my-so/files/ s3://my-so/files/AAP/ 我明白了: (dryrun) move: s

注意:bash脚本现在正确了

我正在重新组织我的s3文件结构,并希望基本上创建1000个子文件夹,因为我的所有文件都在一个目录中。例如,我将其简化为6个文件(这些文件将被拆分为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上): 已修复:基于以下注释的正确代码-已从include和exclude参数中的引号中删除\项

# 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/

您只需将代码从“$1”

更改为“
$1
”,而不必说“
”,“$i”
创建
命令时,不要转义引号。这将使它看起来错误时,你
回声
它,但这是正常的<代码>回音
没有显示您认为它是什么。更好的是,根本不要把命令放在变量中,直接执行它。见@GordonDavisson,这是正确的。在引号之前删除\修复了我的代码。将阅读提供的链接以获取更多信息。谢谢
(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