Bỏ qua phần mở rộng với find?


11

Tôi cần tạo hình thu nhỏ từ nhiều tệp .png và muốn thực hiện việc này bằng converttiện ích ImageMagicks . Để tìm đệ quy tất cả các tệp không phải là hình thu nhỏ, tôi đang sử dụng cuộc gọi sau (chia thành hai dòng để có thể đọc được):

find . -type f -name "*.png" -not -name "*thumb.png*" \
  -exec convert {} -thumbnail 200x200 {}.thumb.png \;`

Nhưng điều này tất nhiên sẽ tạo ra một tệp có tên a.png.thumb.pngkhi chạy nó trên một tệp có tên a.png. Làm cách nào tôi có thể xóa .pngtiện ích mở rộng khỏi {}tham số thứ hai được truyền để chuyển đổi?

Câu trả lời:


14

Cách dễ nhất để làm điều này là chuyển {}cái vỏ sang một cái vỏ shvà làm cái vỏ làm nó:

find ... \
    -exec sh -c 'convert "$0" -thumbnail 200x200 "${0%.png}.thumb.png"' {} \;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.