Saya ingin memutar semua gambar dalam direktori yang cocok dengan suatu pola.
Sejauh ini saya memiliki:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
tapi itu tidak memberikan hasil?
Jawaban yang Diterima:
Ada beberapa masalah dengan kode Anda. Pertama-tama, Anda menguraikan ls yang merupakan Ide Buruk. Anda juga perlu merujuk ke variabel sebagai $file
seperti yang Anda tunjukkan dan Anda juga harus mengutipnya agar tidak pecah 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 akan tetap bermasalah jika file Anda berisi baris baru tetapi setidaknya tidak akan rusak jika jalur Anda berisi spasi.
Jika semua file berada di direktori yang sama, itu dapat disederhanakan lebih lanjut menggunakan globbing. Anda juga dapat menggunakan perluasan parameter untuk membuat foo_rotated.JPG1
bukannya foo.JPG_rotated.JPG
:
for file in /tmp/p/DSC*.JPG; do
convert "$file" -rotate 90 "${file%.JPG}"_rotated.JPG
done