Find

查找文件然後移動它們並同時重命名它們?

  • May 3, 2019

目前我對一些靜態資產使用三個步驟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目標中的副檔名。不過,我確實想將原始文件保留在我的伺服器上,所以這是一個交易破壞者。

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

引用自:https://unix.stackexchange.com/questions/516793