Tenho um diretório com 170 fotos png em uma máquina Linux Mint, que quero dividir ao meio. Eu inventei uma solução, mas não funcionou direito, porque sobrecarregou o cache. O comando que eu tinha escrito e funcionou para 1 imagem foi:
convert -crop 50%x100% ../image_location.png image_location_cropped.png
Tentei escrever um loop, mas não tive sucesso. Algo assim:
for i in Testovnica_chemia-???.png
do
convert -crop 50%x100% ../Testovnica_chemia-???.png Testovnica_chemia-???_upravene.png
done
A mensagem de erro era semelhante a esta:
convert-im6.q16: cache resources exhausted `../Testovnica_chemia-056.png' @ error/cache.c/OpenPixelCache/4083.
Como devo modificá-lo?
Parece que você criou o loop, mas não usou a variável de loop
Substitua
echo convert
por apenasconvert
quando tiver certeza de que o loop fará o que você desejaHá um mal-entendido fundamental sobre looping. Vamos analisar seu código:
Seu loop será executado com
i
cada instância deTestovnica_chemia-???.png
, entãoTestovnica_chemia-001.png
,Testovnica_chemia-002.png
, etc.Em vez de usar o arquivo que
i
aponta para, agora você está usando cada instância deTestovnica_chemia-???.png
como argumento. Então, toda vez que você passa pelo loop, você está executandoProvavelmente
Testovnica_chemia-???_upravene.png
não corresponderá a nada, então, se a conversão não travar, você terminará com um nome de arquivo com pontos de interrogação.O truque é usar
$i
in no loop para o nome do arquivo. A resposta de @Chris Davies faz exatamente isso.