对 S3 中的选定文件更改 meta-data

Change meta-data on selected files in S3

我发现了一堆扩展名错误的图像文件。由于网站的制作方式,它们必须具有 .jpg 扩展名。但其中一些是 png 个文件。

所以我制作了一个假 JPEG 文件的快速列表 ls public/assets/image/*.jpg | xargs file --mime | grep -v jpeg 并找到了 ,其中包含如何使用 aws-cli 工具更改 Cache-Control 的示例header(我要改Content-Typeheader)。

根据 aws s3 sync help 手册页,语法为 sync <LocalPath> <S3Uri> or <S3Uri> <LocalPath> or <S3Uri> <S3Uri>。因为我 不想 从我的机器同步任何文件,所以我选择了最后一个语法 aws s3 sync <S3Uri> <S3Uri>.

但是在做:

aws s3 sync s3://firefund-assets/underathens4.jpg s3://firefund-assets/underathens4.jpg --content-type image/png

似乎没有任何改变。 underathens4.jpg 文件仍然有 System defined Content-Type image/jpeg... 并且没有任何内容写入标准输出。

如果我可以更改 S3 中文件的 meta-data,那么我可以简单地做 cat fakeJpegs.txt | sed 's/public\/assets\/image\///' | xargs -i aws s3 sync s3://firefund-assets/'{}' s3://firefund-assets/'{}' --content-type image/png

我不想 re-upload 任何文件。在那种情况下,我可以使用 s3.console.aws.amazon.com 并手动进行更改。 我只是想偶尔有一个小脚本来做这个..

相关但建议重新上传文件。

您可以在指定新信息时将对象复制到自身上

使用cp命令而不是sync命令:

aws s3 cp s3://firefund-assets/file.jpg s3://firefund-assets/file.jpg --content-type image/png