目前,我对一些静态资产使用三个步骤gzip
,然后使用s3cmd
S3 存储桶(从技术上讲,它是一个 Digital Ocean Spaces 存储桶)。这就是我所做的:
$ find . -type f -name '*.css' | xargs -I{} gzip -k -9 {}
$ find . -type f -name '*.css.gz' | xargs -I{} s3cmd put --acl-public --add-header='Content-Encoding: gzip' {} s3://mybucket/assets/{}
- 但随后我必须手动更改存储桶中的所有扩展才能删除该
.gz
扩展。
有没有办法让我不必手动执行第 3 步?我很想知道是否可以在步骤 2 中删除.gz
目标中的扩展程序。不过,我确实想将原始文件保留在我的服务器上,所以这是一个大问题。
答案1
您可以使用-exec
in 操作find
,以便可以对文件名进行 shell 字符串操作。参数扩展"${var%.*}"
可用于删除扩展。下面是一个例子。
find . -type f -name '*.css.gz' -exec bash -c 's3cmd put --acl-public --add-header="Content-Encoding: gzip" "$1" "s3://mybucket/assets/${1%.*}"' -- {} \;