web-dev-qa-db-ja.com

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

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

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

convert png:10020 jpg:10020.jpg

しかし、私はこれをすべてのファイルにわたるバッチとして実行したいと思います。 findの出力をパイプして、すべてのPNGファイルをJPGに変換するにはどうすればよいですか?

2
Hibiscus
_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_拡張子のないPNGでいっぱいのディレクトリをJPGに変換して動作します。

3
BenjiWiebe