9

我将以下内容作为 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 是:

(“一二/”)

并说这两个文件夹都包含一个名为...“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'(0.1 秒内 13551 个字节,168.22 kB/s)[1 of 0]

...然后对第二个文件夹进行远程复制操作:

远程复制:两个/script.js -> script.js

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

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

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

4

1 回答 1

3

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

对于目录,需要注意一件事——您可以上传目录及其内容,也可以只上传内容。这完全取决于您如何指定来源。要上传目录并在远程端保留其名称,请指定不带斜杠的源另一方面,仅上传内容,请使用斜杠指定目录

于 2015-01-28T09:21:54.700 回答