この.gifを見つけて変換する方法は?

この.gifを見つけて変換する方法は?

ファイル名識別子を含む一連のイメージで構成されたfind.gifファイルのリストがあります。convertpngこれエマルジョン。ここでfind+を結合する方法について考えていますconvert

  1. 以下では、.gifファイルを一覧表示できます。

    find -L *.gif -type f
    
  2. .gif画像を一連のpng画像に変換できますが、独自の識別子はありません。

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

疑似コードは、{}.pngファイル名のリストから新しいファイル名を取得するように言おうとしますが、リストにも.gif拡張子が含まれているので機能しないと思うので、削除する必要があります。

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

オペレーティングシステム:Debian 8.7

答え1

zshの使用

autoload -U zmv # best in ~/.zshrc

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

たとえば、ファイルパスにある可能性のある名前付きファイルやエスケープ文字に関連する問題を./避ける必要があります。gif:whatever.gif${1//\%/%%}%

  • *****あなたがしたように、ディレクトリツリーを下るときにシンボリックリンクに従うのと同じです-L
  • (#q...)グローバル予選
  • -:symlinkターゲットに次のチェックをstat()適用しますlstat()-L
  • .:一般ファイルのみ(と同じ-type f

答え2

Steeldriverがコメントに素晴らしい答えを与えました。

 find -L . -name '*.gif' -execdir sh -c 'for f; 
      do convert -coalesce "$f" "${f%.gif}%05d.png"; 
 done' sh {} +

関連情報