Пропустить расширение с помощью find?

11

Мне нужно создавать эскизы из нескольких файлов .png и я хотел бы сделать это с помощью convertутилиты ImageMagicks . Чтобы рекурсивно найти все файлы, которые сами не являются миниатюрами, я использую следующий вызов (разбитый на две строки, чтобы сделать его читаемым):

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

Но это, конечно, создаст файл с именем a.png.thumb.pngпри запуске его с именем файла a.png. Как я могу удалить .pngрасширение из второго {}параметра, переданного для преобразования?

Маркус Ример
источник

Ответы:

14

Самый простой способ сделать это состоит в том, чтобы передать {}off как в shell shи заставить это сделать:

find ... \
    -exec sh -c 'convert "$0" -thumbnail 200x200 "${0%.png}.thumb.png"' {} \;
jw013
источник