我正在尝试创建一个 shell 脚本来管理我与 s3 存储桶的同步。
这是我的脚本中的内容:
#!/bin/bash
aws s3 sync $1 $2 $(for word in $(echo "$excludeconf"| tr ";" " "); do echo -n "--exclude \"$word\" "; done) $del --no-follow-symlinks $3
$1
是源$2
是目的地$3
是另一个被传递的参数(dryrun)。 $(word...
获取文件和文件夹列表 $excludeconf
并创建 --exclude ...
跟他们。如果我运行脚本,它不会排除任何东西。
如果我把
echo
在上面的命令前面,我得到了这个:aws s3 sync . s3://BUCKETNAME/FOLDERNAME/ --exclude .SOMEFILE --exclude "public/icon/*" --delete --no-follow-symlinks --dryrun
如果我复制该命令并在终端内手动运行它,它就可以正常工作。
有任何想法吗?
仅供引用:我正在运行 CentOS 7
编辑:
经过一些测试,我发现问题是通配符:public/icon/* 被解释为 public/icon/folder1 public/icon/folder2 如果我尝试设置 noglob,它将不起作用.. isist 因为它在 $ 内(..)?
最佳答案
我用python重写了脚本并将其更改为:
os.system("set -f noglob && aws s3.....")
那行得通。
关于shell - AWS CLI S3 Sync 排除在脚本中不起作用,直接在终端中起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50592374/