ImageMagick - 여러 for 루프를 통해 파일 이름 증가

ImageMagick - 여러 for 루프를 통해 파일 이름 증가

이것은 일련의 "for" 루프를 사용하여 파일 이름 이름 바꾸기/증가에 대한 Bash 질문입니다. 이런 행동이 이해가 안가네요...

convertImageMagick 명령 사용

3개의 소스 파일로 이 작업을 수행하면 다음과 같습니다.

$ convert *.miff dir/%d.miff
$ convert *.miff dir1/%d.miff

예상되는 동작을 얻었고 두 파일이 모두 포함되었습니다 dir. 이는 원하는 동작입니다. 그러나 모든 소스 이미지를 메모리로 읽고 리소스를 흡수하는 것(대형 이미지 파일 30~40개 시도)이 반드시 파일 순서를 엄격하게 따르는 것은 아닙니다.dir10.miff 1.miff 2.miffconvert

엄격한 순서로 파일별로 한 번에 한 파일씩 최종 처리 요구 사항을 충족하는 것이 더 좋습니다.

$ for var in `ls -v *.miff`; do convert $var dir/%d.miff; done
$ for var in `ls -v *.miff`; do convert $var dir1/%d.miff; done

그런데 들어갔다가 0.miff 1.miff 2.miff또 들어 dir갔어요3.miff 4.miff 5.miffdir1

*.miff각 루프에 다른 변수를 할당 하고 다음과 같은 것을 $var사용해 보았습니다 . 변경 없음 - 각 "for" 루프에서 "0"으로 재설정하는 대신 위쪽으로 계속 증가합니다.%d.miff$((x++)).miff

나는 의미가 있는 답변을 검색했지만 이것이 bash에 포함된 동작이고 변수 사용과 관련된 것으로 의심됩니다 $var.

편집 #1

독자에게 부담을 주지 않기 위해 문제는 단순화되지만 각각 다른 작업을 수행하는 4개의 루프가 있으며 최종적으로 4개의 디렉터리에 생성된 이미지를 재조립하는 수정된 스크립트는 다음과 같습니다.Jesse_p의 답변을 바탕으로:

x=(0)    
for i in `ls -v *.miff`; do 
  convert "$i" -depth $depth -roll +0+0 -sample 50% B/"$((x++)).miff"
done

x=(0)    
for i in `ls -v *.miff`; do 
  convert "$i" -depth $depth -roll +0+1 -sample 50% G/"$((x++)).miff"
done

x=(0)    
for i in `ls -v *.miff`; do
  convert "$i" -depth $depth -roll +1+0 -sample 50% g/"$((x++)).miff"
done    

x=(0)    
for i in `ls -v *.miff`; do 
  convert "$i" -depth $depth -roll +1+1 -sample 50% R/"$((x++)).miff"
done

for ((R=0,G=0,g=0,B=0;R<=101;R+=1,G+=1,g+=1,B+=1)); do
  convert R/$R.miff G/$G.miff B/$B.miff depth $depth \
     -colorspace sRGB -combine "$((x++))_$name.tiff"    
done

답변1

ImageMagick에 따르면문서이를 사용하여 -scene시작 시퀀스 번호를 설정할 수 있습니다. (V6.2 이상):

즉, ilkkachu가 지적하고 내 테스트에서 확인했듯이 루프는 파일을 0.miff전혀 증가시키지 않고 이름이 지정된 파일을 계속 덮어쓸 것입니다. 다음 콘텐츠로 증분 파일을 생성할 수 있습니다.

x=0
for file in *.miff; do convert "$file" "dir/$((x++)).miff"; done
x=0
for file in *.miff; do convert "$file" "dir1/$((x++)).miff"; done

x=00라는 변수 에 값을 할당합니다 x.

$((x++))증가할 것이다x 뒤쪽에현재 운영. 따라서 첫 번째 실행에서는 0.miff, 그 다음에는 1.miff 등이 됩니다. x=0다음에 실행할 때 0에서 시작하는지 확인하기 위해 루프 사이에서 다시 호출합니다 .

glob 파일(*.miff)은 다음보다 작습니다.ls를 구문 분석하다

관련 정보