Quindi, risulta che "aws s3 sync" non esegue file, ma solo directory. Se gli dai un file, ottieni un ... interessante ... comportamento, dal momento che tratta qualsiasi cosa tu gli dia come una directory e la butta su una barra. Almeno aws-cli/1.6.7 Python/2.7.5 Darwin/13.4.0 fa.
%% date > test.txt
%% aws s3 sync test.txt s3://bucket/test.txt
warning: Skipping file /Users/draistrick/aws/test.txt/. File does not exist.
Quindi, se si -really- solo desidera sincronizzare un file (upload soltanto se esiste, e se checksum corrisponde) lo si può fare:
file="test.txt"
aws s3 sync --exclude '*' --include "$file" "$(dirname $file)" "s3://bucket/"
Annotare il escludere/includere ordine - se lo inverti, non includerà nulla. E il tuo percorso di origine e inclusione deve avere un buon equilibrio intorno alla loro corrispondenza, quindi forse un $ (nome di base $ file) è in ordine per --include se stai usando percorsi completi ... aws --debug s3 sync è il tuo amico qui per vedere come valutano gli include.
E non dimenticare che la destinazione è una chiave di directory, non una chiave di file.
Ecco un esempio di lavoro:
%% file="test.txt"
%% date >> $file
%% aws s3 sync --exclude '*' --include "$file" "$(dirname $file)" "s3://bucket/"
upload: ./test.txt to s3://bucket/test.txt/test.txt
%% aws s3 sync --exclude '*' --include "$file" "$(dirname $file)" "s3://bucket/"
%% date >> $file
%% aws s3 sync --exclude '*' --include "$file" "$(dirname $file)" "s3://bucket/"
upload: ./test.txt to s3://bucket/test.txt/test.txt
(ora, se solo ci fosse un modo per chiedere AWS S3 per -just- convalidare il checksum, dal momento che sembra di fare sempre checksum stile più parti .. oh, forse alcuni --dryrun e alcuni output di scraping e sincronizzazione ..)
Correlati: [GH-404] (https://github.com/aws/aws-cli/issues/404), [GH-1449] (https://github.com/aws/aws-cli/issues/1449) e [GH-2874] (https://github.com/aws/aws-cli/issues/2874) su GitHub. – kenorb