Execute o comando em um par de arquivos

1

** Contexto: ** Eu fiz a varredura de muitas fotos antigas, que estão escrevendo no verso.

Usando o imagemagick, posso acrescentar a frente e a parte de trás da imagem da seguinte forma:

montage out20.jpg out21.jpg -gravity center -geometry +1+1 -tile 1x2 out2021.jpg; rm out20.jpg out21.jpg;
#(vertical append)

Meu problema é que tenho muitas fotos para aplicar o comando.

Existe uma maneira de pedir ao bash que aplique "montagem" a cada arquivo ímpar, adicionando automaticamente o nome do arquivo que vem depois dele? O nome do arquivo de saída também é um problema.

    
por Manu 03.11.2009 / 21:22

1 resposta

4

Rápido e sujo:

#!/bin/bash
ls *.jpg | while read file
do
  number='echo $file | tr -dc 0-9';
  if [ $((number % 2)) -eq 0 ]; then
    nextnumber='echo $number + 1 | bc';
    nextfile='echo $file | sed s/$number/$nextnumber/';
    outfile='echo $file | sed s/$number/$number$nextnumber/';
    montage $file $nextfile -gravity center -geometry +1+1 -tile 1x2 $outfile
  fi
done

Você disse para aplicar a montagem aos arquivos ímpares, mas fornecidos até mesmo no seu exemplo. O código acima funcionará para o mesmo. Se você precisar que os arquivos ímpares sejam os primeiros, basta alterar esta linha:

if [ $((number % 2)) -eq 0 ]; then

para ser isso:

if [ $((number % 2)) -eq 1 ]; then
    
por 03.11.2009 / 21:47