1

imagemagik を使用して jpg を変換するこの単純なシェル スクリプトを作成しました。正常に動作しますが、検索の反復ごとにスクリプトを介してファイル拡張子を渡しながら、png、gif、jpeg などを含めたいと思います。私は、検索をループするこのアプローチを好みます。これにより、処理された各項目についてより適切にレポートでき、各プロセスに他のサイズと変換を追加するためのよりスケーラブルなスクリプトを使用できるようになります。(単純な convert * コマンドではなく)。

助言がありますか?

find cdn/ -name '*.jpg' -print |  sort | 
while read f; 
 do 
 b=$(basename $f .jpg)
 in="${b}.jpg"
 thumb="${b}_150x150.jpg" 
if [ -e $thumb ]; 
then 
 true  
else 
 convert -resize 150 $in $thumb   
fi

done
4

2 に答える 2

1

よりモジュール化して、2 番目のスクリプトを呼び出して画像ファイルを処理します。

find /path -type f -print |
while read filename ; do
     sh /path/to/process_image $filename
done

process_imageスクリプト内で、ファイルの拡張子名またはファイル タイプに基づいて何を行うかを選択できます。スクリプトは、画像の種類、サイズなどに基づいて何をしたいかによって、他のスクリプトを呼び出すことができます。

問題を 1) ファイルの検索、2) ファイルの処理方法の決定、3) ファイルの処理に分割します。モジュール化すると、問題が分割され、個別に取り組むことができます。

于 2013-03-10T17:11:21.820 に答える
1

「問題を1)ファイルの検索、2)ファイルの処理方法の決定、3)ファイルの処理に分割します。モジュール化すると、問題が分割され、個別に取り組むことができます。」以前に提案したように。これにより、より多くの処理を追加するためのよりスケーラブルなアプローチが可能になります。

この方法では、ファイルを拡張子で渡す必要はありません。拡張子でファイルを渡すのは、あなたが望むものですか? それをしなければなりませんか?

また、

  • 大文字と小文字を区別しない検索を行うには、-iname '*.jpg'代わりにso を使用します。-name '*.jpg'
  • 検索でさらに-inameパラメーターを使用して、必要な他のすべての拡張機能を検索します。例えば、

    find cdn/ \(-iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' -o -iname '*.gif' \) -print

つまり、find を何度も使用してさまざまな拡張ファイルを見つけるのではなく、必要なすべてのファイルを 1 回のパスで見つけることができます。

于 2013-03-10T22:49:50.633 に答える