이미지 크기를 800px로 조정하고 비율을 유지하는 bash 스크립트를 만들고 싶습니다.
내 코드는 bash에서는 작동하지 않지만 identify
단일 이미지에서는 작동합니다.
#!/bin/bash
for file in ./**/public/uploads/*.*; do
width = $(identify -format "%w" ${file})
if [ width > 800 ]
then
echo $file // resize image
fi
done
exit 0;
질문: 저는 Permission denied
3호선을 이용합니다.
아래 답변 중 하나에 제공된 솔루션을 시도했습니다.
#!/bin/bash
shopt -s globstar
for file in ./**/public/uploads/*.*; do
width=$(identify -format "%w" "${file}")
if [ "$width" -gt 800 ]
then
echo "$file"
fi
done
exit 0;
이제 다음 오류 메시지가 나타납니다.
identify.im6: Image corrupted ./folder/public/uploads/ffe92053ca8c61835aa5bc47371fd3e4.jpg @ error/gif.c/PingGIFImage/952.
./images.sh: line 6: width: command not found
./images.sh: line 7: [integer expression expected
답변1
귀하의 스크립트에는 두 가지 명백한 문제가 있습니다. 첫째, 기본적으로 활성화되지 않은 옵션 **
으로 제공 됩니다. globstar
대화형 셸에서 이를 활성화했을 수도 있지만 스크립트에 대해서도 이 작업을 수행해야 합니다.
그러면 실제로 비교하는 것이 아니라 $width
strings 을 비교하는 것입니다 width
. $
필요 [ ]
.
마지막 문제는 실행 중인 파일 중 일부가 손상되었거나 이미지가 아니라는 것입니다. 어쨌든 identify
명령이 실패하므로 $width
비어 있습니다. 간단한 해결책은 $width
null( -z "$width"
)을 테스트하고 null( ! -z "$width"
)만 비교하는 것입니다.
이 시도:
#!/bin/bash
shopt -s globstar
for file in ./**/public/uploads/*.*; do
width=$(identify -format "%w" "${file}")
if [[ ! -z "$width" && "$width" -gt 800 ]]
then
echo "$file"
fi
done
exit 0;
답변2
문제(또는 문제 중 적어도 하나)는 귀하가 말한 내용입니다.
width = $(identify -format "%w" "${file}")
다음과 같이 앞뒤 공백을 제거해야 합니다 =
.
width=$(identify -format "%w" "${file}")