NodeJS “aws s3 sync”如何确定文件是否已更新?

uqjltbpv  于 2023-01-04  发布在  Node.js
关注(0)|答案(3)|浏览(157)

当我在终端中连续运行这个命令时,它第二次不会同步。这很好!它不应该同步。但是,如果我连续运行我的构建过程和编程运行aws s3 sync,它会两次同步所有文件,就好像我的构建过程第二次改变了一些不同的东西。
不知道会发生什么。有什么想法吗?
我的构建过程基本上是pug source/ --out static-site/stylus -c styles/ --out static-site/styles/

hs1rzwqc

hs1rzwqc1#

根据这个-http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html
S3 sync比较文件的大小和上次修改的时间戳,以查看文件是否需要同步。
在您的情况下,我怀疑构建系统会导致更新的时间戳,即使文件大小没有改变。

bxjv4tth

bxjv4tth2#

AWS CLI sync
如果本地文件的大小与s3对象的大小不同、本地文件的上次修改时间晚于s3对象的上次修改时间,或者本地文件不存在于指定的存储桶和前缀下,则需要上载本地文件。

  • -size-only(boolean)使每个键的大小成为决定是否从源同步到目标的唯一标准。
    您需要--size-only选项,该选项只查看文件大小而不查看最后修改日期,这对于经常更改最后修改日期而不更改文件实际内容的资产构建系统来说是完美的(我遇到了这个与webpack构建的东西,如字体保持同步,即使文件内容是相同的).如果你不' Don "不要使用将内容的哈希值合并到文件名中的构建方法,这可能会遇到问题(如果构建生成大小相同但内容不同的文件),所以要小心。
    我确实手动测试了添加一个不在远程存储桶上的新文件,它确实被添加到了--size-only的远程存储桶中。
ahy6op9u

ahy6op9u3#

这篇文章有点过时了,但我还是会为通过谷歌来到这里的人们做出贡献。
我同意勾选答案。要添加额外的上下文,AWS S3功能在许多方面不同于标准Linux S3。在Linux中,可以计算md5 hash来确定文件是否已更改。S3不这样做,因此它只能根据大小和/或时间戳进行确定。更糟糕的是,AWS在传输时不保留时间戳。因此当同步到本地时忽略时间戳,并且仅当同步到S3时使用时间戳。

相关问题