Do manual:
Mogrify overwrites the original image file, whereas, convert(1) writes to a different image file.
Você pode fazer:
find ./covers -type f -name '*.jpg' -execdir convert {} -resize 75x75 th_{} \;
Isso provavelmente será mais eficiente se você tiver um grande número de arquivos.
Em geral, por várias razões , é uma má idéia canalizar a saída de find
to xargs
, a menos que você use o seguinte padrão, que as variantes GNU e BSD find
suportam: find … -print0 | xargs -0 …
Se você quiser usar comandos somente de shell, pode fazer um loop pelos arquivos da seguinte forma:
for image in ./covers/*.jpg; do convert "$image" -resize 75x75 "$(dirname $image)/th_$(basename $image)"; done
É o mais fácil (e seguro) que você pode obter, sem ter que recorrer a comandos externos. No entanto, você precisará dividir o caminho e o nome do arquivo e inserir o prefixo entre eles. Se você já está na mesma pasta, isso é muito mais fácil:
for i in *.jpg; do convert "$i" -resize 75x75 "th_$i"; done
Uma solução universal e mais curta com o Zsh:
for i (./covers/*.jpg) convert "$i" -resize 75x75 "${i:h}/th_${i:t}"