bash - TCropping images with loop in imagemagick -
a pretty basic question i'm new imagemagick (and bash) , i'm having trouble batch cropping images in folder. i've tried using loop:
for image in '/home/donald/desktop/new folder'*.jpg; convert "$image" -gravity center -crop 95x95% "${image%.jpg}"-modified.jpg done but returns:
convert.im6: unable open image `/home/donald/desktop/new folder/*.jpg': no such file or directory @ error/blob.c/openblob/2638. convert.im6: no images defined `/home/donald/desktop/new folder/*-modified.jpg' @ error/convert.c/convertimagecommand/3044." what proper way of doing this?
edit: apparently space in folder name causing problems deleted , things seem working.apparently if want use folder space name in bash need escape space.
i believe have no jpg files in /home/donald/desktop/new folder/ directory. shell interpret literal string /home/donald/desktop/new folder/*.jpg if there no files matching wildcard-ed string.
see example:
$ f in *.jpg*; echo $f; done file.jpg file2.jpg $ f in *.jpgg; echo $f; done *.jpgg see how last 1 literal string , not real file? should have been displayed first time if (notice trailing asterix symbol in *.jpg*).
you can fix checking if file exists before executing command, using [ -f "${file}" ]. instance:
for image in '/home/donald/desktop/new folder'*.jpg; [ -f "${image}" ] && convert "$image" -gravity center -crop 95x95% "${image%.jpg}"-modified.jpg done this check if file image exists (-f) , execute following statement if true returned &&. had written || instead of && following statement executed when false returned.
note bash doesn't return true or false it's easiest way explain , comprehend notation.
Comments
Post a Comment