1
resposta

Outra forma de fazer, sem o find

Usei a própria lógica da recursividade para sair do diretório:

#! /bin/bash

conversao() {
  # converte arquivo
  local nome_sem_extensao=$(ls $1 | awk -F. '{ print $1 }' )
  convert $1 $nome_sem_extensao.png
}

varredura_recursiva() {

  cd $1
  for item in *
    do
      if [ -d $item ]; then
        varredura_recursiva $item
      else
        conversao $item
      fi
    done
  cd ..
}

FOLDER=$HOME/Development/shell_scripts/imagens-livros
if [ -d $FOLDER ]; then
  varredura_recursiva $FOLDER
else
  echo 'Diretório inexistente!'
fi

isso resolve o problema do find já relatado nos comentários anteriores, mas deixa o algoritmo "perigoso". Na verdade, nem há nem a necessidade de passar a pasta como argumento, tudo pode ser feito dessa forma também.

#! /bin/bash

conversao() {
  # converte arquivo
  local nome_sem_extensao=$(ls $1 | awk -F. '{ print $1 }' )
  convert $1 $nome_sem_extensao.png
}

varredura_recursiva() {

  for item in *
    do
      if [ -d $item ]; then
        cd $item
        varredura_recursiva 
      else
        conversao $item
      fi
    done
  cd ..
}

FOLDER=$HOME/Development/shell_scripts/imagens-livros
if [ -d $FOLDER ]; then
  cd $FOLDER
  varredura_recursiva
else
  echo 'Diretório inexistente!'
fi

a própria natureza recursiva, junto com o empilhamento do vetor dos arquivos a cada chamada, já se encarrega de tudo

1 resposta

Oi, Victor. Tudo bem?

Parabéns e obrigado por compartilhar sua solução.

Bons estudos!