답변:
당신은 사용할 수 있습니다 identify
에서 imagemagick
, 다음과 같은 명령을 사용할 수 있습니다 :
find . -iname "*.jpg" -type f -exec identify -format '%w %h %i' '{}' \; | awk '$1<300 || $2<300'
를 사용 -exec <command> '{}' \;
하면 파일 이름에 공백이 있는지 확인하거나 대신 사용할 수 있습니다
find . -iname "*.jpg" -type f | xargs -I{} identify -format '%w %h %i' {} | awk '$1<300 || $2<300'
여기서이 -I{}
같은 일을 담당한다.
내가 좋아하는 identify
것은 출력 형식을 지정할 수 있다는 것입니다. 이 경우 '%w %h %i'
이미지의 너비, 높이 및 전체 경로 이름을 제공합니다. 그런 다음 awk
표현식은 이미지가 원하는 크기보다 작은 선만 유지합니다.
출력 예 :
64 64 ./thumbsup.jpg
100 150 ./photomin.jpg
편집 : 당신은 파일 이름 만 (에 배관하려는 경우 rm
예를 들어), 간단하게 변경 $line
에 awk
에 문 $3
, 다음은 세 번째 열을 인쇄합니다.
'%w %h %i\n'
그것을 위해 일하기 위해 개행 ( ) 을 추가해야했다 .
| xargs -I {} mv {} /destination/directory/
나는 받아 들인 대답이 매우 좋다고 생각하지만 다른 가능한 해결책을 추가하고 싶었습니다 ...
내가 ImageMagick
지금 가장 자주 도구를 사용하지만 netpbm
이미지를 처리하는 오랜 친구입니다. 다음 명령으로 이미지 형식의 크기를 볼 수 있습니다.
anytopnm file | pamfile
다음과 같은 출력이 생성됩니다.
stdin: PPM raw, 1650 by 1275 maxval 255
의 질문에 대답하기 위해 "파이프 후 다음 무엇을?", 내가 사용하는 while read
더 자주 사용하는 것보다 xargs
더 유연하기 때문이다. netpbm
질문에 대한 나의 대답은 다음과 같습니다.
find -iname \*.jpg | while read img; do \
anytopnm "$img" | pamfile | \
perl -ane 'exit 1 if $F[3]<300 || $F[5]<300' || rm -v "$img"; \
done
패키지 의 identify
명령은 imagemagick
원하는 것을 수행합니다.
$ identify abc.jpg
abc.jpg JPEG 1952x3264 1952x3264+0+0 8-bit DirectClass 1.111MB 0.000u 0:00.000
다시 grep
이미지 크기를 정렬하는 데 사용해야 합니다.
그러나 이미지 크기가 매우 넓지 않으면 find
주어진 크기 이하의 JPEG 파일을 제거 하는 것이 더 쉬울 것입니다 .
find -iname '*.jpg' -size -10k -delete
( -delete
먼저 확인 하지 않고 실행 하는 경우 유지하려는 항목을 찾지 못합니다. 그렇지 않으면 삭제하기 전에 프롬프트가 표시되지 않습니다).
| awk '$1<300||$2<300'
또는| awk '$1<300||$2<300{print $3}'
(3 번째 열만 필요할 때).