1

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.

user2757729
  • 487
  • 1
  • 5
  • 10

2 Answers2

3
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
user.dz
  • 48,105
0

Works fine for file names with spaces also.

To remove originals:

SAVEIFS=$IFS; IFS=$'\n'
for f in $(find . -iname "*.jpg" -type f); do
    convert "$f" "${f%.*}.png"; rm "$f"
done
IFS=$SAVEIFS

To keep originals: remove the < ; rm "$f" > part

SAVEIFS=$IFS; IFS=$'\n'
for f in $(find . -iname "*.jpg" -type f); do
    convert "$f" "${f%.*}.png"
done
IFS=$SAVEIFS
Vijay
  • 8,056