imagemagick를 사용하여 디렉토리의 모든 이미지를 회전시키는 방법은 무엇입니까?


18

패턴과 일치하는 디렉토리의 모든 이미지를 회전하고 싶습니다.

지금까지 나는 :

for file in `ls /tmp/p/DSC*.JPG`; do
  convert $file -rotate 90 file+'_rotated'.JPG
done

그러나 그것은 출력을 제공하지 않습니까?

답변:


20

코드에는 몇 가지 문제가 있습니다. 우선, 당신은 나쁜 아이디어 인 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

2
당신의 방법은 만들 것 original_filename.JPG_rotated.JPG"입니다. 추가 "${file%.JPG}"_rotated.JPG 더 적절한 이럴 것이다. 건배!
Valentin Bajrami

1
@ val0x00ff는 절대적으로 (그리고 나는 당신의 대답을 올바로 제안했습니다). 방금 OP가 더 눈부신 오류를 수정하는 것과 똑같은 일을 반복했습니다.
terdon

멋있는! 방금 명령을 약간 수정했습니다.
Valentin Bajrami

11

mogrify -rotate 90 *.jpgimagemagick으로 모든 이미지를 회전시키는 더 나은 One-Liner

mogrify -rotate 90 /tmp/p/DSC*.JPG 실제로 디렉토리 에서 .JPG시작하여 모두 회전합니다.DSCp

Mogrify (imagemagick의 일부)는 Convert원본 파일 http://www.imagemagick.org/script/mogrify.php를 수정한다는 점에서 다릅니다 .


11

PE (Parameter Expansion)를 사용하는 간단한 방법은 다음과 같습니다.

for f in /tmp/p/DSC*.JPG
do
  convert -rotate 90 "$f" "${f%.JPG}"_converted.JPG
done

1
거기에는 bash특정한 것이 없으며 , 완벽하게 표준 POSIX sh 구문입니다.
Stéphane Chazelas

6

구문 분석하지 마십시오ls 과는 ls여기에 필요하지 않습니다. 또한 변수에 공백이 포함 된 경우 변수를 인용해야합니다.

for file in *.JPG; do
  convert -rotate 90 "$file" rotated_"$file"
done

공백 ... 또는 탭 또는 줄 바꿈 또는 별표 또는 물음표 또는 대괄호 ...
Stéphane Chazelas

6

imagemagic 솔루션은 아니지만

sips -r 90 *.JPG

.JPG로 끝나는 모든 이미지를 90도 회전시킵니다. 좋은 라이너입니다.


1
다음으로 원본 이미지를 덮어 씁니다.
don_crissti

0

파일을 $file, 즉

for file in `ls /tmp/p/DSC*.JPG`; do
  convert $file -rotate 90 $file+'_rotated'.JPG
done

0

이 코드를 우분투에서 복사 / 붙여 넣기하여 "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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.