Esta é uma questão Bash sobre como renomear / incrementar nomes de arquivos com uma série de loops 'for'. Eu não entendo o comportamento ...
Trabalhando com o comando ImageMagick convert
Se eu fizer isso com 3 arquivos de origem:
$ convert *.miff dir/%d.miff
$ convert *.miff dir1/%d.miff
Eu obtenho o comportamento esperado, com dir
e dir1
contendo os arquivos 0.miff 1.miff 2.miff
- esse é o comportamento necessário. No entanto convert
lê todas as imagens de origem na memória e absorve recursos (Tente isso com 30 - 40 arquivos grandes de imagem), não necessariamente em ordem estrita de arquivos.
Isto é melhor, arquivo por arquivo, em ordem estrita, para satisfazer o requisito de processamento final, um arquivo de cada vez
$ 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
Mas recebo 0.miff 1.miff 2.miff
em dir
e 3.miff 4.miff 5.miff
em dir1
Eu tentei atribuir variáveis diferentes a *.miff
e $var
para cada loop e usando variações em %d.miff
, como $((x++)).miff
. Sem alteração - o incremento continua para cima em vez de ser redefinido para '0' em cada loop 'for'.
Procurei uma resposta significativa, mas suspeito que esse seja um comportamento incorporado ao bash e parece estar relacionado ao uso da variável $var
.
EDIT # 1
A questão é simplificada para evitar sobrecarregar o leitor, mas existem 4 loops, cada um fazendo coisas diferentes, culminando na recombinação das imagens criadas nos 4 diretórios; da seguinte maneira com o script modificado, a resposta de 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