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

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

지금까지 나는 :

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 *.jpgimagemagick으로
모든 이미지를 회전시키는 더 나은 One-Liner

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

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


답변

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

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


답변

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

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


답변

imagemagic 솔루션은 아니지만

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