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?
sumber
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?
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
original_filename.JPG_rotated.JPG"
. menambahkan"${file%.JPG}"_rotated.JPG
akan lebih tepat imho. Bersulang!mogrify -rotate 90 *.jpg
One-Liner yang lebih baik untuk memutar semua gambar dengan imagemagickmogrify -rotate 90 /tmp/p/DSC*.JPG
akan menginput semua.JPG
awal denganDSC
dalamp
direktoriMogrify (bagian dari imagemagick) berbeda
Convert
dengan yang memodifikasi file asli http://www.imagemagick.org/script/mogrify.phpsumber
Metode sederhana menggunakan PE (Parameter Expansion) adalah
sumber
bash
spesifik di sana, itu sintaks POSIX sh standar sempurna.Jangan parse
ls
danls
tidak diperlukan di sini. Selanjutnya, Anda harus mengutip variabel Anda jika mengandung spasi.sumber
Bukan solusi imajemagis, tetapi
akan memutar semua gambar yang berakhiran .JPG 90 derajat. Ini liner yang bagus.
sumber
Saya perlu merujuk file sebagai
$file
, yaitusumber
Anda dapat menyalin / menempelkan kode ini di ubuntu, dan menyimpannya sebagai "rotate.sh"
Setelah menyimpan file ini, jalankan dari terminal menggunakan
./rotate.sh folder_containing_images
sumber