web-dev-qa-db-ja.com

特定のディレクトリですべてのbmpをpngに再帰的に自動的に変換する方法は?

私は自分のマシン上に数百の画像があるディレクトリを持っています。それらの画像の約半分はbmpで、残りの半分はpngです...すべてのbmpをpngにする必要がありますが、たくさんあるので手動でやりたくありません。

では、どのようにして再帰的かつ自動的に(おそらくスクリプトを使用して)すべてのbmp画像ファイルをそのディレクトリ内のpng画像ファイルに変換できますか?

Ubuntu GNOME 15.10とGNOME 3.18を実行しています。

4
user364819

単一のディレクトリには、単純なforループで十分な場合があります。

for i in *.bmp
do 
convert $i "${i%.bmp}.png"
done

これを本当に再帰的にするには、いくつかの選択肢があります。1つの方法は次のとおりです。

find . -name '*.bmp' -type f -exec bash -c 'convert "$0" "${0%.bmp}.png"' {} \;

もう少し手を出す場合は、構文を使用して、PNGレベルの品質レベルを指定します。

-quality value

これは、最低品質および最小ファイルサイズの場合は1の値をとり、最高品質および最大ファイルサイズの場合は100になります。デフォルトは約92です。さらに 詳細はこちら...

7
andrew.46

Andrew.46による答えは、それが雄弁なオンラインライナーであるため、依然として最高だと思います。ただし、別のオプションがあります。唯一の利点は、変換する「ファイルの総数」のうち「現在のファイル数カウント」があり、変換されるファイルをエコーすることです。ただし、実行する前に、ファイル名のスペースをすべて削除することをお勧めします。これにより、スペースが削除されます:find . -name "* *" | rename 's/ /-/g'

#!/bin/bash

cd $(pwd)    
bmp_files=$(find . -iname "*.bmp")

total=$(echo "$bmp_files" | wc -l)
num=0

echo "There are $total files to be converted."

for f in $bmp_files
do
    ((num++))
    echo "Converting $f, $num/$total"   
    convert "$f" "${f%.bmp}.png" 
    clear
done
3
jbrock