vi コマンドを使って自分だけのコマンドをつくる Part.2
前回:Part.1
めざせ自動化!自分用進捗おぼえがきエントリーです。
動機
ブログ用に撮った大量のスクリーンショットを Finder 上ででいちいち操作するのがめんどうくさい。
目的
デスクトップにあるスクリーンショット画像を、一気に一つのディレクトリに移動し、任意の文字列+連番.png という名前に一括リネームしたい。
参考
進捗
Part.1 で「デスクトップ上のPNG画像を新規作成したディレクトリへ一括移動」は達成。
今回は「ディレクトリ内の全ファイルを "任意の文字列+連番.png" という名前に一括変更」するコマンドを作った。
コマンドの名前は「ren-png」。
リネームしたい画像が入っているディレクトリの中で
$ ren-png hogehoge
というふうに実行すると、
hogehoge-1.png hogehoge-2.png hogehoge-3.png …という具合に一括リネームされる。
中身は以下の通り。
name=$@
array=(`ls`)
i=0
k=1
while [ -n "${array[${i}]}" ]
do
mv "${array[${i}]}" "${name}-${k}.png"
i=`expr $i + 1`
k=`expr $k + 1`
done
i は繰り返し処理用、k は連番付与用の変数。
やっている処理は
- name という変数に引数 (例:hogehoge) を入れる
- ディレクトリ内のファイル名 (ls で表示されるもの) を配列に入れる
- 配列の中身の文字数が1文字以上あればリネーム→繰り返す
課題
- 本当は拡張子以前の部分だけリネームしたい。
- スクショのデフォルト名が「スクリーンショット yyyy-mm-dd hh.mm.ss.png」という半角スペースを含んだ名前なので、このままだと配列にぶちこめない。(ファイル名の前半と後半でそれぞれ格納されてしまう)
- スクリーンショット以外のPNGファイルも移動されてしまう。
- 移動先ディレクトリも任意の名前で作成したい。
→続き:Part.3