Yura YuLife

ITエンジニアの覚え書き。

xargsで超簡単に並列処理ができるという衝撃

あるフォルダ内の画像をImageMagickで切り抜いて別のフォルダに保存するシェルスクリプトを動かしていたのですが、何万枚という画像を処理すると結構計算時間がかかります。

シェルスクリプトで簡単に並列処理できないかなーと思ったら、xargsで超簡単に並列化できるんですね。

crop_image.sh

#!/bin/bash
# SRC_DIRの画像を切り抜いてDST_DIRに保存する

SRC_DIR="$1"
DST_DIR="$2"
WIDTH="640"
HEIGHT="360"

# 並列実行数
NUM_PROCESS="4"

# シングルプロセスで実行する場合
for file in `ls ${SRC_DIR}`
do
  convert -crop "${WIDTH}x${HEIGHT}+0+0" "${SRC_DIR}${file}" "${DST_DIR}${file}"
done

# マルチプロセスで実行する場合
ls ${SRC_DIR} | xargs -P ${NUM_PROCESS} -I{} convert -crop "${WIDTH}x${HEIGHT}+0+0" "${SRC_DIR}{}" "${DST_DIR}{}"

僕もマルチプロセス人間にしてください。。。

参考URL