Czy pomijasz rozszerzenie przy pomocy find?

11

Potrzebuję utworzyć miniatury z wielu plików .png i chciałbym to zrobić za pomocą convertnarzędzia ImageMagicks . Aby rekurencyjnie znaleźć wszystkie pliki, które same nie są miniaturami, używam następującego wywołania (podzielonego na dwie linie, aby było czytelne):

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

Ale to oczywiście stworzyłoby plik o nazwie a.png.thumb.pngpodczas uruchamiania go na pliku o nazwie a.png. Jak mogę usunąć .pngrozszerzenie z drugiego {}parametru przekazanego do konwersji?

Marcus Riemer
źródło

Odpowiedzi:

14

Najłatwiejszym sposobem na to jest przekazanie {}powłoki do powłoki podobnej shdo tej, którą wykonuje powłoka:

find ... \
    -exec sh -c 'convert "$0" -thumbnail 200x200 "${0%.png}.thumb.png"' {} \;
jw013
źródło