「find」コマンドを使用してPNGファイルを検索し、出力をimagemagickにパイプしてバッチ変換します。

「find」コマンドを使用してPNGファイルを検索し、出力をimagemagickにパイプしてバッチ変換します。

何千もの画像ファイルを含むディレクトリがあります。ほとんどは JPG ですが、いくつかは PNG です。ファイルには拡張子がなく、番号だけが付けられています。これらすべてを JPG に変換する必要があります。

使用探すすべてのファイルとそのタイプのリストを取得し、そこから Imagemagick を使用してタイプを指定して PNG から JPG に変換できます。

convert png:10020 jpg:10020.jpg

しかし、私はこれをすべてのファイルに対してバッチで実行したいのですが、出力をパイプするにはどうすればいいでしょうか?探すすべての PNG ファイルを JPG に変換しますか?

答え1

find . -type f | while read IN; do
  if [ "x$(file -b --mime-type $IN)" = "ximage/png" ]; then
    convert png:$IN jpg:$IN.jpg;
  fi;
done;

引数の意味:

  1. .
    現在のディレクトリで検索

  2. -type f
    ディレクトリやソケットなどではなく、ファイルだけを検索します。

  3. while read IN; do
    各ファイル名を変数に入れてINループを実行します。

  4. if [ "x$(file -b --mime-type $IN)" = "ximage/png" ]; then
    ファイルが PNG かどうかを確認します...

  5. convert png:$IN jpg:$IN.jpg;
    ...もしそうなら、それを変換します。

  6. fi; done;
    完了しました!

今回テストしてみたところ、拡張子のない PNG でいっぱいのディレクトリを.pngJPG に変換できました。

関連情報