ฉันต้องการหมุนภาพทั้งหมดในไดเรกทอรีที่ตรงกับรูปแบบ
จนถึงตอนนี้ฉันมี:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
แต่นั่นไม่ให้ผลลัพธ์?
ฉันต้องการหมุนภาพทั้งหมดในไดเรกทอรีที่ตรงกับรูปแบบ
จนถึงตอนนี้ฉันมี:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
แต่นั่นไม่ให้ผลลัพธ์?
คำตอบ:
รหัสของคุณค่อนข้างมีปัญหาเล็กน้อย แรกของทั้งหมดที่คุณจะแยกคำสั่ง ls ซึ่งเป็นความคิดที่ดี คุณต้องอ้างถึงตัวแปรตาม$file
ที่คุณชี้ให้เห็นและคุณควรอ้างอิงเพื่อไม่ให้มีช่องว่าง คุณกำลังประกาศnum
แต่มันไม่เคยใช้ วิธีที่ปลอดภัยกว่าคือ:
find /tmp/p/ -name "DSC*.JPG" | while IFS= read -r file; do
convert "$file" -rotate 90 "$file"_rotated.JPG
done
สิ่งนี้จะยังคงมีปัญหาหากไฟล์ของคุณมีการขึ้นบรรทัดใหม่ แต่อย่างน้อยจะไม่แตกถ้าเส้นทางของคุณมีช่องว่าง
หากไฟล์ทั้งหมดอยู่ในไดเรกทอรีเดียวกันก็สามารถทำให้ง่ายขึ้นโดยใช้ globbing คุณยังสามารถใช้การขยายพารามิเตอร์เพื่อสร้างfoo_rotated.JPG1
แทน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 ที่ดีกว่าสำหรับการหมุนภาพทั้งหมดด้วยimagemagick
mogrify -rotate 90 /tmp/p/DSC*.JPG
จะ infact หมุนทั้งหมด.JPG
เริ่มต้นด้วยDSC
ในp
ไดเรกทอรี
Mogrify (ส่วนหนึ่งของ imagemagick) แตกต่างจากConvert
ที่มันแก้ไขไฟล์ต้นฉบับ
http://www.imagemagick.org/script/mogrify.php
วิธีการง่ายๆที่ใช้ PE (การขยายพารามิเตอร์) คือ
for f in /tmp/p/DSC*.JPG
do
convert -rotate 90 "$f" "${f%.JPG}"_converted.JPG
done
bash
เฉพาะในนั้นมันเป็นไวยากรณ์ POSIX sh มาตรฐานอย่างสมบูรณ์
อย่าแยกวิเคราะห์ls
และls
ไม่จำเป็นต้องใช้ที่นี่ นอกจากนี้คุณควรอ้างอิงตัวแปรของคุณในกรณีที่มีช่องว่าง
for file in *.JPG; do
convert -rotate 90 "$file" rotated_"$file"
done
ไม่ใช่วิธีแก้ปัญหาทางจินตนาการ แต่เป็น
sips -r 90 *.JPG
จะหมุนภาพทั้งหมดที่ลงท้ายด้วย. JPG 90 องศา มันเป็นหนึ่งซับที่ดี
ฉันต้องการอ้างถึงไฟล์$file
เช่น
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 $file+'_rotated'.JPG
done
คุณสามารถคัดลอก / วางรหัสนี้ในอูบุนตูและบันทึกเป็น "rotate.sh"
#!/bin/bash -e
CUR_DIR=`pwd`
cd "${1}"
for file in *.jpg; do
convert "${file}" -rotate 90 "${file}";
done
cd CUR_DIR
หลังจากบันทึกไฟล์นี้ให้รันจากเทอร์มินัลโดยใช้ ./rotate.sh folder_containing_images
original_filename.JPG_rotated.JPG"
วิธีการของคุณจะสร้าง การเพิ่ม"${file%.JPG}"_rotated.JPG
จะมีความเหมาะสมมากขึ้น ไชโย!