Синхронизация s3cmd удаленно копирует неправильные файлы в неправильные места

У меня есть следующее как часть сценария оболочки для копирования файлов сайта в CDN S3:

for i in "${S3_ASSET_FOLDERS[@]}"; do
    s3cmd sync -c /path/to/.s3cfg --recursive --acl-public --no-check-md5 --guess-mime-type --verbose --exclude-from=sync_ignore.txt /path/to/local/${i} s3://my.cdn/path/to/remote/${i}
done

Скажем, S3_ASSET_FOLDERS:

("один два/")

и скажите, что обе эти папки содержат файл с именем... "script.js"

и сказать, что я внес изменения в два/script.js, но не затронул один/script.js

выполнение вышеуказанной команды сначала скопирует файл из /one/ в правильное место, хотя я понятия не имею, почему он считает, что это необходимо:

ИНФОРМАЦИЯ: Отправка файла '/path/to/local/one/script.js', подождите... Файл '/path/to/local/one/script.js' сохранен как 's3://my.cdn/ path/to/remote/one/script.js» (13551 байт за 0,1 секунды, 168,22 КБ/с) [1 из 0]

... а затем операция удаленного копирования для второй папки:

удаленная копия: два/script.js -> script.js

Что он делает? Почему?? Эти файлы даже не похожи. Разное время модификации, разные контрольные суммы. Нет связи.

И я получаю ведро s3 с двумя неправильными файлами. Файл в /two/, который должен был быть обновлен, не обновился. И файл в /one/, который не должен был изменяться, теперь перезаписывается содержимым /two/script.js.

Очевидно, я делаю что-то причудливо глупое, потому что я не вижу никого, у кого была бы такая же проблема. Но я понятия не имею, что??


person Wintermute    schedule 04.03.2014    source источник


Ответы (1)


Прежде всего, попробуйте запустить его без опции --no-check-md5.
Во-вторых, я предлагаю вам обратить внимание на имена каталогов, особенно на слеши в конце.
В документации s3cmd говорится:

С каталогами есть одна вещь, на которую следует обратить внимание — вы можете либо загрузить каталог и его содержимое, либо только содержимое. Все зависит от того, как вы укажете источник. Чтобы загрузить каталог и сохранить его имя на удаленной стороне, укажите источник без косой черты в конце. С другой стороны, чтобы загрузить только содержимое, укажите каталог с косой чертой в конце

person user2256686    schedule 28.01.2015