s3cmd sync是将错误文件远程复制到错误的位置

时间:2014-03-04 13:09:19

标签: bash amazon-s3 s3cmd

我将以下内容作为shell脚本的一部分,将站点文件复制到S3 CDN:

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是:

(“one /”“two /”)

并说这两个文件夹都包含一个名为...“script.js”

的文件

并说我已对 two / script.js 进行了更改 - 但未触及 one / 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 kB / s)[1 of 0]

...然后是第二个文件夹的远程复制操作:

  

remote copy:two / script.js - >的script.js

它在做什么?为什么??那些文件甚至都不相似。不同的修改时间,不同的校验和。没关系。

我最终得到了一个带有两个不正确文件的s3存储桶。/ two /中应该更新的文件没有。并且/ one /中不应该更改的文件现在被/two/script.js的内容覆盖

显然,我正在做一些奇怪的事,因为我没有看到其他人有同样的问题。但我不知道是什么??

1 个答案:

答案 0 :(得分:3)

首先,尝试在没有--no-check-md5选项的情况下运行它。
其次,我建议你注意目录名,特别是尾部斜杠。
 s3cmd documentation说:

  

使用目录时需要注意一件事 - 您可以上传目录及其内容,也可以只上传内容。这一切都取决于您如何指定源。   要上载目录并将其名称保留在远程端,请指定不带斜杠的源   另一方面,只上传内容,用尾部斜杠指定目录