Итак, получается, что «синхронизация aws s3» не работает с файлами, а только с каталогами. Если вы дадите ему файл, вы получите... интересное... поведение, поскольку он обрабатывает все, что вы ему даете, как каталог и добавляет к нему косую черту. По крайней мере, aws-cli/1.6.7 Python/2.7.5 Darwin/13.4.0.
%% date > test.txt
%% aws s3 sync test.txt s3://bucket/test.txt
warning: Skipping file /Users/draistrick/aws/test.txt/. File does not exist.
Итак, если вы действительно хотите синхронизировать файл (загружать только в том случае, если он существует и если контрольная сумма совпадает), вы можете сделать это:
file="test.txt"
aws s3 sync --exclude '*' --include "$file" "$(dirname $file)" "s3://bucket/"
Обратите внимание на порядок исключения/включения — если вы измените его, он ничего не будет включать. И ваш исходный и включаемый пути должны быть разумными в отношении их соответствия, поэтому, возможно, $(базовое имя $file) подходит для --include, если вы используете полные пути... aws --debug s3 sync - ваш друг здесь чтобы увидеть, как оцениваются включения.
И не забывайте, что целью является ключ каталога, а не ключ файла.
Вот рабочий пример:
%% 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
(теперь, если бы только был способ попросить aws s3 просто проверить контрольную сумму, поскольку он, кажется, всегда выполняет контрольные суммы в многокомпонентном стиле.
person
keen
schedule
21.04.2015