Find
查找文件然後移動它們並同時重命名它們?
目前我對一些靜態資產使用三個步驟
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
目標中的副檔名。不過,我確實想將原始文件保留在我的伺服器上,所以這是一個交易破壞者。
您可以使用該
-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%.*}"' -- {} \;