使用 find 省略扩展名?

使用 find 省略扩展名?

我需要从多个 .png 文件创建缩略图,并希望使用 ImageMagicksconvert实用程序来执行此操作。为了递归地查找本身不是缩略图的所有文件,我使用以下调用(分成两行以使其可读):

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

a.png.thumb.png但是,当在名为 的文件上运行它时,这当然会创建一个名为 的文件a.png。如何从传递给转换的.png第二个{}参数中删除扩展名?

答案1

最简单的方法是将其传递{}给 shell sh,然后让 shell 执行此操作:

find ... \
    -exec sh -c 'convert "$0" -thumbnail 200x200 "${0%.png}.thumb.png"' {} \;

相关内容