패턴과 일치하는 디렉토리의 모든 이미지를 회전하고 싶습니다.
지금까지 나는 :
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
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
답변
구문 분석하지 마십시오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