AWS S3 Sync игнорирует параметр --exclude при выполнении через скрипт оболочки - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь создать сценарий оболочки (Mac OSX), который принимает именованные аргументы и выполняет команду AWS S3 Sync на основе этих аргументов.У меня есть несколько папок с файлом «config.xml» в S3.Я пытаюсь загрузить или выгрузить только один из этих файлов, указав имя папки, параметры загрузки / выгрузки и dryrun для сценария оболочки.

Проблема в том, что при выполнении сценария --exclude "*" игнорируется, но если я выведу команду и затем скопирую и вставлю вывод в Terminal, он будет работать правильно.

Я видел некоторые сообщения о настройке noglob, но, похоже, это не относится к моему делу, но я все равно попробовал его, и это не решило проблему.

#!/bin/bash
dryrun=true
dryarg=""
while getopts rs:c: option
do
    case "${option}"
    in
        s ) sync=${OPTARG};;
        c ) client=${OPTARG};;
        r ) dryrun=false;;
        \? ) echo "$(tput setaf 1)Unknown option: -$OPTARG$(tput sgr 0)" >&2; exit 1;;
        :  ) echo "$(tput setaf 1)Missing option argument for -$OPTARG$(tput sgr 0)" >&2; exit 1;;
        *  ) echo "$(tput setaf 1)Unimplemented option: -$OPTARG$(tput sgr 0)" >&2; exit 1;;
    esac
done
if [ ! "$sync" ] || [ ! "$client" ]
then
    echo "$(tput setaf 1)sync method and client are required options"
    echo "nothing is happening until you declare these!!$(tput sgr 0)"
    exit 1
fi
if [ "$dryrun" == "true" ]
then
    dryarg="--dryrun"
else 
    dryarg=""
fi
if [ "$sync" == "u" ] || [ "$sync" == "upload" ]
then
    echo "$(tput setaf 2)uploading $dryarg $(tput sgr 0)"
    echo $(tput setaf 2)aws s3 sync . s3://mybucket --exclude '"*"' --include '"'"$client"'/config.xml"' "$dryarg"$(tput sgr 0)
    aws s3 sync s3://etl.elevatemaps.io .  --exclude '"*"' --include '"'"$client"'/config.xml"' "$dryarg"
elif [ "$sync" == "d" ] || [ "$sync" == "download" ]
then
    echo "$(tput setaf 3)downloading $dryarg $(tput sgr 0)"
    echo $(tput setaf 3)aws s3 sync s3://mybucket . --exclude '"*"' --include '"'"$client"'/config.xml"' "$dryarg"$(tput sgr 0)
    aws s3 sync s3://etl.elevatemaps.io . --exclude '"*"' --include '"'"$client"'/config.xml"' "$dryarg"
fi
fi

Если я выполню

./sync.sh -s download -c FolderA
uploading --dryrun 
aws s3 sync s3://mybucket . --exclude "*" --include "FolderA/config.xml" --dryrun

но вывод S3 показывает каждую загружаемую папку, dryrun соблюдается.Если я копирую и вставляю команду, она выполняется правильно.Если я выполню

./sync.sh -s upload  -c FolderA
uploading --dryrun 
aws s3 sync . s3://mybucket --exclude "*" --include "FolderA/config.xml" --dryrun

, я получу ошибку для aws cli, указывающую на неверные параметры.

Может кто-нибудь помочь мне исправить это?

...