0

I'm trying to resize all images in a directory and sub directories. I have this script which I got from here: Use mogrify to resize large files while ignoring small ones

and adjusted to:

identify -format '%w %h %i\n' ./*.jpg |
awk '$1 > 1200 || $2 > 1200 {sub(/^[^ ]* [^ ]* /, ""); print}' |
tr '\n' '\0' |
xargs -0 mogrify -resize '1200x1200'

but it only does the current directory and only .jpg extensions - ignores the upper case - .JPG

I've tried making adjustments but not making much progress.

1 Answer 1

3

You could combine identify with find, for example:

find . -type f -iname "*.jpg" -exec identify -format '%w %h %i\n' {} \;

which will run your identify command for every file recursively found with name ending in .jpg (case-insensitive).

Using your full example:

find . -type f -iname "*.jpg" -exec identify -format '%w %h %i\n' {} \; |
awk '$1 > 1200 || $2 > 1200 {sub(/^[^ ]* [^ ]* /, ""); print}' |
tr '\n' '\0' |
xargs -0 mogrify -resize '1200x1200'
8
  • Awesome - works perfectly! In second code block just update the file extension to .jpg Commented Aug 15, 2017 at 8:29
  • I have just tried this same script on another server but just get the error: find: `identify': No such file or directory Commented Aug 15, 2017 at 10:53
  • Is imagemagick installed? Commented Aug 15, 2017 at 11:01
  • Yes it is installed Trying again and get loads of the above error message and this at the bottom: xargs: mogrify: No such file or directory Commented Aug 15, 2017 at 11:14
  • How do I do that? Commented Aug 15, 2017 at 11:20

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.