답변:
코드에는 몇 가지 문제가 있습니다. 우선, 당신은 나쁜 아이디어 인 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
imagemagick으로
모든 이미지를 회전시키는 더 나은 One-Liner
mogrify -rotate 90 /tmp/p/DSC*.JPG
실제로 디렉토리 에서 .JPG
시작하여 모두 회전합니다.DSC
p
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
bash
특정한 것이 없으며 , 완벽하게 표준 POSIX sh 구문입니다.
구문 분석하지 마십시오ls
과는 ls
여기에 필요하지 않습니다. 또한 변수에 공백이 포함 된 경우 변수를 인용해야합니다.
for file in *.JPG; do
convert -rotate 90 "$file" rotated_"$file"
done
imagemagic 솔루션은 아니지만
sips -r 90 *.JPG
.JPG로 끝나는 모든 이미지를 90도 회전시킵니다. 좋은 라이너입니다.
original_filename.JPG_rotated.JPG"
입니다. 추가"${file%.JPG}"_rotated.JPG
더 적절한 이럴 것이다. 건배!