Como encontrar + converter nestes .gif?

2

Eu quero que find uma lista de arquivos .gif, convert todos eles para séries de png imagens com identificadores de nome de arquivo e faça o loop dessas séries em este LaTeX. Eu estou aqui thining como combinar o find + convert .

  1. Eu posso listar o arquivo .gif por:

    find -L *.gif -type f
    
  2. Eu posso converter a imagem .gif para uma série de imagens png, mas sem identificador próprio

    # TODO take filename from find list and give to convert and to the resulted filename
    convert -coalesce giphy.gif out%05d.png
    

Pseudocódigo em que {}.png tenta dizer que pega o novo nome de arquivo da lista de nomes de arquivos, mas acho que não funciona porque a lista também contém .gif extension, então ele deve ser removido:

find -L *.gif -type f -exec convert -coalesce {} {}.png +

OS: Debian 8.7

    
por Léo Léopold Hertz 준영 08.06.2017 / 22:55

2 respostas

1

A grande resposta da Steeldriver no comentário

 find -L . -name '*.gif' -execdir sh -c 'for f; 
      do convert -coalesce "$f" "${f%.gif}%05d.png"; 
 done' sh {} +
    
por 09.06.2017 / 09:51
2

com zsh

autoload -U zmv # best in ~/.zshrc

splitgif() convert -coalesce "$@"
zmv -p splitgif './(***/)(*).gif(#q-.)' './${1//\%/%%}${2//\%/%%}%05d.png'

Observe a necessidade de ./ evitar problemas com arquivos denominados gif:whatever.gif , por exemplo, e ${1//\%/%%} , para escapar dos caracteres % que podem ser encontrados nos caminhos de arquivos.

  • *** é o mesmo que ** , mas segue os links simbólicos ao descer a árvore de diretórios como -L
  • (#q...) qualifier glob
  • - : aplica as seguintes verificações ao destino do link simbólico para links simbólicos ( stat() em vez lstat() ) como com seu -L .
  • . : somente arquivos regulares (equivalente a -type f )
por 09.06.2017 / 10:45