Ubuntu – Batch Convert Images from One Format to Another while maintaining directory structure, and removing originals

image processing

I've looked at this question, and while it works there a few issues:

  1. All converted images are placed in the directory from which the command is called.
  2. The original images are kept.

I need to convert around 70,000 .tif and .jpgs to .pngs. It's really important the the files when converted are placed in their normal directories.

I can do a batch rm of .tff/.jpg's at the end if that's the best way to handle removing the old files.

Best Answer

for f in $(find . -iname "*.jpg" -type f) ;
    do
    convert $f $(dirname $f)/$(basename -s .jpg $f).png ;
    done
  • find . -iname "*.jpg" -type f : search for file ending with ".jpg" case insensitive
  • $(dirname $f) : relative path to the folder containing file $f
  • $(basename -s .jpg $f) : filename without the suffix ".jpg"

In old Ubuntu basename may need to be run with different way:

basename $f .jpg

Convert is a part of imagemagick (As reference see Batch Processing tif images: Converting .tif to .jpeg) , to install

sudo apt-get install imagemagick