Я хочу иметь возможность указать место, где нужно сканировать и куда будет конвертирован файл.
Просто есть много конверсий, и у меня есть скрипт, который должен сортировать его для меня. В настоящее время я пробовал
convert -resize 300x300 > /media/usbdisk1/development/ephoto/richard/images/gallery/2007/29/normal/*.jpg /media/usbdisk1/development/ephoto/richard/images/gallery/2007/29/tn_med/$1.jpg
и
for i in $( ls /media/usbdisk1/development/ephoto/richard/images/gallery/2007/29/normal); do /usr/convert resize 360x360 > /media/usbdisk1/development/ephoto/richard/images/gallery/2007/29/normal/$i /media/usbdisk1/development/ephoto/richard/images/gallery/2007/29/tn_med/$i done;
Нет причин повторять ваш длинный каталог трижды. Используйте переменную для базы. И не используйте ls
:
base="/media/usbdisk1/development/ephoto/richard/images/gallery/2007/29"
for file in "$base/normal/*"
do
convert -resize 360x360 "$file" "$base/tn_med/$(basename $file)"
done
Вместо basename
вы можете сделать это следующим образом:
convert -resize 360x360 "$file" "$base/tn_med/${file##*/}"
for i in $( ls /media/usbdisk1/development/ephoto/richard/images/gallery/2007/29/normal); do
convert -resize 360x360 /media/usbdisk1/development/ephoto/richard/images/gallery/2007/29/normal/$i /media/usbdisk1/development/ephoto/richard/images/gallery/2007/29/tn_med/$i;
done
понял!
Как подсказывают комментарии, можно использовать команду find
:
outdir=/media/usbdisk1/development/ephoto/richard/images/gallery/2007/29/tn_med
cd /media/usbdisk1/development/ephoto/richard/images/gallery/2007/29/normal
find . -iname '*.jpg' -print0 | xargs -I{} -0 -r convert -resize 300x300 {} $outdir/{}
Используя -print0
и опцию xarg -0
, можно также обрабатывать имена файлов с пробелами и другими странными символами.