폴더의 모든 이미지를 찾고 ImageMagick을 사용하여 엔딩이 손상되었는지 확인하는 bash 스크립트를 작성 중입니다.
자동화하려는 명령은 다음과 같습니다.
identify -verbose *.jpg 2>&1 | grep "Corrupt" | egrep -o "([\`].*[\'])"
내가 겪고 있는 문제는 인식 명령을 변수에 저장하는 것입니다.
명령에 여러 유형의 따옴표가 있습니다. 오류가 계속 발생합니다.8행: 손상: 명령을 찾을 수 없습니다.
#!/bin/bash
# This script will search for all images that are broken and put them into a text file
FILES="*.jpg"
for f in $FILES
do
corrupt = "identify -verbose \"$f\" 2>&1 | grep \"Corrupt\" | egrep -o \"([\`].*[\'])\""
if [ -z "$corrupt" ]
then
echo $corrupt
else
echo "not corrupt"
fi
done
이 명령을 적절하게 이스케이프하는 방법이 있습니까?
고쳐 쓰다:
일부 진행 상황:
#!/bin/bash
# This script will search for all images that are broken and put them into a text file
FILES="*.jpg"
for f in $FILES
do
echo "Processing $f"
corrupt="identify -verbose $f 2>&1 | grep \"Corrupt\" | egrep -o \"([\`].*[\'])\""
if [ -z "$corrupt" ]
then
echo $corrupt
else
echo "not corrupt"
fi
done
더 이상 오류가 발생하지 않지만 변수를 문자열로 저장하는 것처럼 보입니다.
이 명령을 어떻게 실행할 수 있나요?
업데이트: 약간의 진전이 있었습니다. 이제 명령이 실행 중입니다.
#!/bin/bash
# This script will search for all images that are broken and put them into a text file
FILES="*.jpg"
for f in $FILES
do
echo "Processing $f"
corrupt=`identify -verbose $f | grep \"Corrupt\" | egrep -o \"([\`].*[\'])\"`
$corrupt
if [ -z "$corrupt" ]
then
echo $corrupt
else
echo "not corrupt"
fi
done
그러나 파이프의 출력은 별개입니다.
Processing sdfsd.jpg
identify-im6.q16: Premature end of JPEG file `sdfsd.jpg' @ warning/jpeg.c/JPEGWarningHandler/387.
identify-im6.q16: Corrupt JPEG data: premature end of data segment `sdfsd.jpg' @ warning/jpeg.c/JPEGWarningHandler/387.
결승전만 필요해`sdfsd.jpg'끈.
답변1
손상된 이미지를 식별하는 방법을 찾고 있을 수도 있습니다. 도구의 종료 상태를 쉽게 쿼리하여 identify
이미지 파일을 인식했는지 확인할 수 있습니다.
#!/bin/sh
for name in *.jpg; do
if identify -regard-warnings -- "$name" >/dev/null 2>&1; then
printf 'Ok: %s\n' "$name"
else
printf 'Corrupt: %s\n' "$name"
fi
done
종료 상태는 위에서 identify
파일이 손상되었는지 확인하는 데 사용됩니다.-regard-warnings
옵션언급한 경고를 오류로 업그레이드하면 유틸리티의 종료 상태에 영향을 미치게 됩니다.
실제 와일드카드 패턴을 변수에 저장할 필요가 거의 없습니다. 일반적으로 도구의 출력을 구문 분석하지 않고 유틸리티의 종료 상태(위에 표시된 대로)를 테스트하여 유틸리티의 성공/실패 상태를 얻을 수 있습니다.
이전 ImageMagick 버전(6.9.12.19를 사용 중) convert
의 경우 identify
.
#!/bin/sh
for name in *.jpg; do
if convert -regard-warnings -- "$name" - >/dev/null 2>&1; then
printf 'Ok: %s\n' "$name"
else
printf 'Corrupt: %s\n' "$name"
fi
done
위의 루프는 각 이미지를 변환하려고 시도하며, 이미지 파일 처리가 실패하면 명령문으로 이를 감지합니다 if
. 변환 작업의 결과를 삭제합니다.