動作環境
CentOS Linux release 7.7.1908 (Core)
状況
- bashスクリプト(ImageMagickのconvertコマンドを実行する)を並列化したい
- 自作のlsで並列化用のファイルリスト分割をする
v0.1, v0.2
v0.3
v0.2の場合、DIR/PREFIX*のようなアスタリスクで終わる場合には対応していたが、DIR/*.psのように後ろに文字指定したい場合には使用できなかった。
今回はBrace Expansionの結果を配慮して対応することにした。
- 1つ目と2つ目の引数は分割の指定用
- 1つ目: インターバル
- 2つ目: 開始インデックス
- 3つ目以降にファイルリストがある (Brace Expansionの結果)
code
my_ls_skipped_191024_exec
#!/usr/bin/env bash
function myls_skipped()
{
INTVL=$1 && INDX=$2 && echo $* | awk '{$1="";$2="";print}' | \
xargs --max-args=1 | awk '(NR % '$INTVL' == '$INDX'){print $1}'
}
if [ $# -lt 3 ];then
echo "[cmd] [interval] [start] [list of files]"
echo "e.g."
echo "[cmd] 4 1 *.ps"
exit
fi
for elem in $(myls_skipped $*);
do
echo $elem
done
実行分が長くなったので行連結とした。
実行例
$ bash my_ls_skipped_191024_exec 3 0 DATA/*.ps
DATA/tmp3.ps
$ bash my_ls_skipped_191024_exec 3 1 DATA/*.ps
DATA/tmp1.ps
DATA/tmp4.ps
$ bash my_ls_skipped_191024_exec 3 2 DATA/*.ps
DATA/tmp2.ps
DATA/tmp5.ps