【发布时间】: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