Bir dizindeki bir desene uyan tüm resimleri döndürmek istiyorum.
Şimdiye kadar var:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
ama bu hiç çıktı vermiyor?
Bir dizindeki bir desene uyan tüm resimleri döndürmek istiyorum.
Şimdiye kadar var:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
ama bu hiç çıktı vermiyor?
Yanıtlar:
Kodunuzla ilgili birkaç sorun var. Her şeyden önce, kötü bir fikir olan ls ayrıştırıyorsunuz . Değişkeni $file
işaret ettiğiniz gibi belirtmeniz gerekir ve ayrıca boşluklara zarar vermeyecek şekilde alıntı yapmanız gerekir. Bildiriyorsunuz num
ama asla kullanılmıyor. Daha güvenli bir yol:
find /tmp/p/ -name "DSC*.JPG" | while IFS= read -r file; do
convert "$file" -rotate 90 "$file"_rotated.JPG
done
Dosyalarınız yeni satır içeriyorsa bu sorun devam eder, ancak yolunuzda boşluk varsa en azından kesilmez.
Dosyaların hepsi aynı dizinde ise, globbing kullanılarak daha da basitleştirilebilir. Ayrıca oluşturmak için parametre genişleme kullanabilirsiniz foo_rotated.JPG1
yerine foo.JPG_rotated.JPG
:
for file in /tmp/p/DSC*.JPG; do
convert "$file" -rotate 90 "${file%.JPG}"_rotated.JPG
done
mogrify -rotate 90 *.jpg
Tüm görüntüleri imagemagick ile döndürmek için daha iyi One-Liner
mogrify -rotate 90 /tmp/p/DSC*.JPG
Tüm döndür infact olacaktır .JPG
ile başlangıç DSC
halinde p
dizine
Mogrify (imagemagick'in bir parçası) Convert
, orijinal dosyayı http://www.imagemagick.org/script/mogrify.php olarak değiştirmesinden
farklıdır.
PE (Parametre Genişletme) kullanarak basit bir yöntem
for f in /tmp/p/DSC*.JPG
do
convert -rotate 90 "$f" "${f%.JPG}"_converted.JPG
done
bash
spesifik bir şey olmadığı, mükemmel standart POSIX sh sözdizimi olduğuna dikkat edilmelidir .
Ayrıştırmayınls
ve ls
burada gerekli değildir. Ayrıca, boşluk içermeleri durumunda değişkenlerinizi belirtmelisiniz.
for file in *.JPG; do
convert -rotate 90 "$file" rotated_"$file"
done
Imagemagic bir çözüm değil,
sips -r 90 *.JPG
.JPG ile biten tüm görüntüleri 90 derece döndürür. İyi bir astar.
Dosyaya $file
, yani
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 $file+'_rotated'.JPG
done
Bu kodu ubuntu'ya kopyalayıp yapıştırabilir ve "rotate.sh" olarak kaydedebilirsiniz.
#!/bin/bash -e
CUR_DIR=`pwd`
cd "${1}"
for file in *.jpg; do
convert "${file}" -rotate 90 "${file}";
done
cd CUR_DIR
Bu dosyayı kaydettikten sonra şunu kullanarak terminalden çalıştırın. ./rotate.sh folder_containing_images
original_filename.JPG_rotated.JPG"
. ekleme"${file%.JPG}"_rotated.JPG
daha uygun olacaktır imho. Şerefe!