【问题标题】:RESOLVED: AWS CLI mv not recognizing exclude include arguments in bash script已解决:AWS CLI mv 无法识别 bash 脚本中的排除包含参数
【发布时间】:2019-11-29 04:32:22
【问题描述】:

注意:bash 脚本现在正确。

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

当我在以下脚本中创建它时,它似乎完全忽略了排除和包含参数。即使我只有数组中的 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 文件应该转到 files/AAP/
  • DFB 文件应转到 files/DFB/
  • TRO 文件应转到 files/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

【问题讨论】:

  • 你不必说$i 而不是"$i"
  • 创建command 数组时不要转义引号。当你echo 时,这会让它看起来不对,但这是正常的; echo 没有显示您的想法。更好的是,根本不要将命令放在变量中,直接执行即可。见BashFAQ #50: I'm trying to put a command in a variable, but the complex cases always fail!
  • @GordonDavisson 是正确的。删除引号之前的 \ 修复了我的代码。将阅读提供的链接以获取更多信息。谢谢!

标签: bash amazon-web-services command-line-interface


【解决方案1】:

您只需将代码从“$1”更改为$1

【讨论】:

    猜你喜欢
    • 2022-11-22
    • 1970-01-01
    • 2021-11-25
    • 2021-07-16
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多