Batch Converte imagens de um formato para outro, mantendo a estrutura de diretórios e removendo originais

1

Eu olhei para esta questão , e enquanto trabalha lá alguns problemas:

  1. Todas as imagens convertidas são colocadas no diretório a partir do qual o comando é chamado.
  2. As imagens originais são mantidas.

Eu preciso converter cerca de 70.000 arquivos .tif e .jpgs em .pngs. É muito importante que os arquivos quando convertidos sejam colocados em seus diretórios normais.

Eu posso fazer um lote rm de .tff / .jpg no final, se essa é a melhor maneira de remover os arquivos antigos.

    
por user2757729 16.01.2014 / 17:14

2 respostas

3
for f in $(find . -iname "*.jpg" -type f) ;
    do
    convert $f $(dirname $f)/$(basename -s .jpg $f).png ;
    done
  • find . -iname "*.jpg" -type f : pesquisa por arquivo terminado com ".jpg" insensitivo a maiúsculas e minúsculas
  • $(dirname $f) : caminho relativo para a pasta que contém o arquivo $ f
  • $(basename -s .jpg $f) : nome do arquivo sem o sufixo ".jpg"

No antigo basename do Ubuntu pode ser necessário executar de maneira diferente:

basename $f .jpg

O Convert é uma parte do imagemagick (como referência, consulte Processamento em lote tif imagens: Convertendo .tif para .jpeg ), para instalar

sudo apt-get install imagemagick
    
por user.dz 16.01.2014 / 17:51
0

Funciona bem para nomes de arquivos com espaços também.

Para remover originais:

SAVEIFS=$IFS; IFS=$'\n'
for f in $(find . -iname "*.jpg" -type f); do
    convert "$f" "${f%.*}.png"; rm "$f"
done
IFS=$SAVEIFS

Para manter os originais: remova o < ; rm "$ f" > parte

SAVEIFS=$IFS; IFS=$'\n'
for f in $(find . -iname "*.jpg" -type f); do
    convert "$f" "${f%.*}.png"
done
IFS=$SAVEIFS
    
por Vijay 31.08.2018 / 18:06