Saya ingin memutar semua gambar dalam direktori yang cocok dengan suatu pola.
Sejauh ini saya punya:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
tapi itu tidak menghasilkan apa-apa?
Saya ingin memutar semua gambar dalam direktori yang cocok dengan suatu pola.
Sejauh ini saya punya:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
tapi itu tidak menghasilkan apa-apa?
Jawaban:
Ada beberapa masalah dengan kode Anda. Pertama-tama, Anda parsing ls yang merupakan Ide Buruk . Anda juga perlu merujuk ke variabel seperti yang $file
Anda tunjukkan dan Anda juga harus mengutipnya agar tidak pecah pada spasi. Anda mendeklarasikan num
tetapi tidak pernah digunakan. Cara yang lebih aman adalah:
find /tmp/p/ -name "DSC*.JPG" | while IFS= read -r file; do
convert "$file" -rotate 90 "$file"_rotated.JPG
done
Ini masih akan memiliki masalah jika file Anda berisi baris baru tetapi setidaknya tidak akan pecah jika jalur Anda berisi spasi.
Jika semua file berada di direktori yang sama, maka dapat disederhanakan menggunakan globbing. Anda juga dapat menggunakan ekspansi parameter untuk membuat foo_rotated.JPG1
alih-alih 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
One-Liner yang lebih baik untuk memutar semua gambar dengan imagemagick
mogrify -rotate 90 /tmp/p/DSC*.JPG
akan menginput semua .JPG
awal dengan DSC
dalam p
direktori
Mogrify (bagian dari imagemagick) berbeda Convert
dengan yang memodifikasi file asli
http://www.imagemagick.org/script/mogrify.php
Metode sederhana menggunakan PE (Parameter Expansion) adalah
for f in /tmp/p/DSC*.JPG
do
convert -rotate 90 "$f" "${f%.JPG}"_converted.JPG
done
bash
spesifik di sana, itu sintaks POSIX sh standar sempurna.
Jangan parsels
dan ls
tidak diperlukan di sini. Selanjutnya, Anda harus mengutip variabel Anda jika mengandung spasi.
for file in *.JPG; do
convert -rotate 90 "$file" rotated_"$file"
done
Bukan solusi imajemagis, tetapi
sips -r 90 *.JPG
akan memutar semua gambar yang berakhiran .JPG 90 derajat. Ini liner yang bagus.
Saya perlu merujuk file sebagai $file
, yaitu
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 $file+'_rotated'.JPG
done
Anda dapat menyalin / menempelkan kode ini di ubuntu, dan menyimpannya sebagai "rotate.sh"
#!/bin/bash -e
CUR_DIR=`pwd`
cd "${1}"
for file in *.jpg; do
convert "${file}" -rotate 90 "${file}";
done
cd CUR_DIR
Setelah menyimpan file ini, jalankan dari terminal menggunakan ./rotate.sh folder_containing_images
original_filename.JPG_rotated.JPG"
. menambahkan"${file%.JPG}"_rotated.JPG
akan lebih tepat imho. Bersulang!