패턴과 일치하는 디렉토리의 모든 이미지를 회전하고 싶습니다.
지금까지 나는 다음을 가지고 있습니다 :
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
그러나 이것은 출력을 제공하지 않습니까?
답변1
mogrify -rotate 90 *.jpg
모든 이미지 회전을 위한 더 나은 One-Liner이미지 매직
mogrify -rotate 90 /tmp/p/DSC*.JPG
.JPG
실제로 다음으로 시작하는 디렉토리의 모든 항목을 회전합니다 .DSC
p
모그리피(imagemagick의 일부) Convert
는 원본 파일을 수정하는 것과 동일하지 않습니다http://www.imagemagick.org/script/mogrify.php
답변2
코드에 많은 문제가 있습니다. 먼저, ls를 구문 분석하고 있습니다.나쁜 생각. 지적하신 것처럼 변수도 인용 해야 $file
하고, 공백으로 인해 깨지지 않도록 인용도 해야 합니다. 선언했지만 num
사용하지 않았습니다. 더 안전한 접근 방식은 다음과 같습니다.
find /tmp/p/ -name "DSC*.JPG" | while IFS= read -r file; do
convert "$file" -rotate 90 "$file"_rotated.JPG
done
파일에 줄 바꿈이 포함되어 있으면 여전히 문제가 발생하지만 경로에 공백이 포함되어 있으면 적어도 문제가 발생하지 않습니다.
파일이 모두 동일한 디렉터리에 있는 경우 와일드카드를 사용하여 더욱 단순화할 수 있습니다. 매개변수 확장을 사용하여 foo_rotated.JPG1
대신 생성할 수도 있습니다 foo.JPG_rotated.JPG
.
for file in /tmp/p/DSC*.JPG; do
convert "$file" -rotate 90 "${file%.JPG}"_rotated.JPG
done
답변3
PE(매개변수 확장)를 사용하는 간단한 방법은 다음과 같습니다.
for f in /tmp/p/DSC*.JPG
do
convert -rotate 90 "$f" "${f%.JPG}"_converted.JPG
done
답변4
imagemagic 솔루션은 아니지만,
sips -r 90 *.JPG
.JPG로 끝나는 모든 이미지는 90도 회전됩니다. 이것은 훌륭한 하나의 라이너입니다.