Shell AWS CLI S3同步排除不在脚本中工作,直接在终端中工作
我正在尝试创建一个shell脚本来管理与s3 bucket的同步。 以下是我脚本中的内容:Shell AWS CLI S3同步排除不在脚本中工作,直接在终端中工作,shell,amazon-s3,centos,sh,aws-cli,Shell,Amazon S3,Centos,Sh,Aws Cli,我正在尝试创建一个shell脚本来管理与s3 bucket的同步。 以下是我脚本中的内容: #!/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…获取文件和文件夹列表$
#!/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,它将不起作用..是因为它在$(..)内吗?我用python重写了脚本,并将其更改为:
os.system("set -f noglob && aws s3.....")
成功了。当脚本不工作时,您如何运行脚本?在这种情况下,点可能会有不同的解释。我添加了它(#!/bin/bash)好的,但它是如何执行的。cron?添加一个
--debug
参数,看看它说了什么。(您可能想删除--dryrun
)这基本上是一样的,解决方案也是一样的:使用数组。