引数で与えたファイルを一つずつ処理する

一つ一つのファイルに何かコマンドを適用するというのをよくやるので、楽にできるようにしておきたい。

each_args.sh

#!/bin/sh

# 引数の一つ目で実行するコマンドを与えて、二つ目以降の引数に適用する。
# example
# each_args.sh 'zip `basename $1 .txt`.zip $1' *

CMD=$1
shift

while [ $# -gt 0 ] ; do
    eval "$CMD"
    shift
done

カレントディレクトリにあるファイルを一つずつ拡張子を変更して zip で固める例

$ ls
a.txt b.txt c.txt
$ each_args.sh 'zip `basename $1 .txt`.zip $1' *
adding: a.txt (stored 0%)
adding: b.txt (stored 0%)
adding: c.txt (stored 0%)
$ ls
a.txt a.zip b.txt b.zip c.txt c.zip