파일을 찾은 다음 이동하고 동시에 이름을 바꾸시겠습니까?

파일을 찾은 다음 이동하고 동시에 이름을 바꾸시겠습니까?

현재 저는 일부 정적 자산에 대해 3단계를 사용한 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매개변수 확장을 "${var%.*}"사용하여 확장을 제거할 수 있습니다. 아래는 예시입니다.

find . -type f -name '*.css.gz' -exec bash -c 's3cmd put --acl-public --add-header="Content-Encoding: gzip" "$1" "s3://mybucket/assets/${1%.*}"' -- {} \;

관련 정보