查找文件然后移动它们并同时重命名它们?

查找文件然后移动它们并同时重命名它们?

目前,我对一些静态资产使用三个步骤gzip,然后使用s3cmdS3 存储桶(从技术上讲,它是一个 Digital Ocean Spaces 存储桶)。这就是我所做的:

  1. $ find . -type f -name '*.css' | xargs -I{} gzip -k -9 {}
  2. $ find . -type f -name '*.css.gz' | xargs -I{} s3cmd put --acl-public --add-header='Content-Encoding: gzip' {} s3://mybucket/assets/{}
  3. 但随后我必须手动更改存储桶中的所有扩展才能删除该.gz扩展。

有没有办法让我不必手动执行第 3 步?我很想知道是否可以在步骤 2 中删除.gz目标中的扩展程序。不过,我确实想将原始文件保留在我的服务器上,所以这是一个大问题。

答案1

您可以使用-execin 操作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%.*}"' -- {} \;

相关内容