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 /复制到正确的位置,虽然我不知道为什么它认为它需要:
INFO: Sending file
‘/path/to/local/one/script.js’,please wait…
File
‘/path/to/local/one/script.js’
stored as
‘s3://my.cdn/path/to/remote/one/script.js’ (13551
bytes in 0.1 seconds,168.22 kB/s) [1 of 0]
…然后是第二个文件夹的远程复制操作:
remote copy: two/script.js -> script.js
它在做什么?为什么??那些文件甚至都不相似.不同的修改时间,不同的校验和.没关系.
我最终得到了一个带有两个不正确文件的s3存储桶./ two /中应该更新的文件没有.并且/ one /中不应该更改的文件现在被/two/script.js的内容覆盖
很明显,我做了一些奇怪的事,因为我没有看到其他人有同样的问题.但我不知道是什么?
其次,我建议你注意目录名,特别是尾部斜杠.
s3cmd documentation说:
With directories there is one thing to watch out for – you can either upload the directory and its contents or just the contents. It all depends on how you specify the source. To upload a directory and keep its name on the remote side specify the source without the trailing slash On the other hand to upload just the contents,specify the directory it with a trailing slash