
도전: 특정 문자열의 존재를 감지하려면 imagemagick의 "identify" 명령의 출력을 구문 분석해야 합니다. 존재하지 않으면 파일 이름을 화면에 표시합니다.
배경: 대략 100,000개의 썸네일 이미지가 있습니다(분석이 필요한 썸네일 예시). 각 썸네일을 검사하여 올바르게 렌더링되었는지 확인해야 합니다. 다행히도 썸네일에 빨간색 픽셀이 있으면 "올바르게 렌더링되었는지" 확인할 수 있습니다. imagemagick의 "identify" 명령을 사용하면 "(255, 0, 0) #FF0000 red" 줄이 포함된 컬러맵을 출력할 수 있습니다.
필요: Bash 스크립트를 사용하면 모든 파일 이름을 쉽게 가져와서 반복할 수 있습니다. 방법을 알아내야 해요아무 말 않고출력을 통해 구문 분석하고 일치하는 문자열을 찾고, 찾을 수 없으면 파일 이름을 에코합니다.
특히 제가 하려는 작업은 다음을 수행하는 스크립트를 만드는 것입니다.
1) 특정 디렉토리에 있는 모든 *.png 파일을 찾습니다.
2) 각 파일에 대해 "identify -verbose"를 실행하고아무 말 않고출력을 다음으로 전달합니다...
3) 출력을 분석하여 "(255, 0, 0) #FF0000 red" 문자열이 존재하는지 확인합니다.
3a) 그렇다면 조용히 다음 파일을 계속 진행합니다.
3b) 그렇지 않은 경우 파일 이름을 에코합니다.
결국 빨간색 픽셀이 포함되지 않고 수동 검사가 필요한 짧은 미리보기 이미지 목록만 남게 됩니다.
이 스크립트를 만드는 데 도움이 될 것입니다.최대감사합니다.
답변1
빨간색 픽셀이 없는 파일을 찾으려면:
for i in *png; do identify -verbose "$i" | gawk -e "{print \"$i\", \$0}" | fgrep -q '(255, 0, 0) #FF0000 red' || echo $i; done
빨간색 픽셀이 있는 파일을 찾으려면:
for i in *png; do identify -verbose "$i" | gawk -e "{print \"$i\", \$0}" | fgrep -q '(255, 0, 0) #FF0000 red' && echo $i; done
gawk 명령은 식별 명령의 각 출력 행에 파일 이름을 추가합니다. grep 대신 fgrep을 사용하면 정확한 텍스트 일치를 더 빠르게 찾을 수 있습니다. fgrep에 대한 -q 플래그는 어떤 라인도 출력하지 않도록 지시합니다. 상태를 성공 또는 실패로 설정하기만 하면 됩니다.
스크립트는 공백이 포함된 파일 이름에 대해 안전해야 합니다.