while 루프에서 정규식 또는 이와 유사한 bash 필터 파일 이름

while 루프에서 정규식 또는 이와 유사한 bash 필터 파일 이름

현재 디렉터리에 있는 모든 파일의 너비와 높이를 가져오는 다음 bash 스크립트가 있습니다.

ls | cat -n | while read n f; do 
  width=$(identify -format "%w" "$f")
  height=$(identify -format "%h" "$f")
  echo "$width , $height"
done

파일 이름이 로 끝나는 파일의 높이/너비를 얻는 방법은 무엇입니까 -example99.jpg?

답변1

for filename in *-example99.jpg
do
  width=$(identify -format "%w" "$filename")
  height=$(identify -format "%h" "$filename")
done

답변2

여기에는 루프가 필요하지 않습니다.

identify -format "%w , %h\n" ./*-example99.jpg

( %f파일 이름도 필요한 경우 형식에 추가하세요.)

파일당 2개의 명령을 실행 하지 않으려면 identify다음을 수행할 수도 있습니다( 여기서 ksh93또는 구문 사용).bash

unset -v file width height
file=(./*-example99.jpg)
eval "$(identify -format 'width+=(%w) height+=(%h)\n' "${file[@]}")"

for ((i = 0; i < ${#file[@]}; i++)); do
  printf 'File: %s (%s x %s)\n' "${file[i]}" "${width[i]}" "${height[i]}"
done

(또는 배열의 키를 for i in "${!file[@]}"; do...반복합니다 ).$file

이는 모든 파일 너비와 높이가 인식된다고 가정하며 여러 이미지(예: 애니메이션)를 포함할 수 있는 파일 형식에는 이 방법을 사용 identify하지 않습니다 .gif

답변3

단순한find+identify방법:

find . -maxdepth 1 -type f -name "*-example99.jpg" -exec identify -format "%w, %h\n" {} \;

출력 예:

640, 480

관련 정보