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 は連番付与用の変数。

やっている処理は

  1. name という変数に引数 (例:hogehoge) を入れる
  2. ディレクトリ内のファイル名 (ls で表示されるもの) を配列に入れる
  3. 配列の中身の文字数が1文字以上あればリネーム→繰り返す

課題

  • 本当は拡張子以前の部分だけリネームしたい。
  • スクショのデフォルト名が「スクリーンショット yyyy-mm-dd hh.mm.ss.png」という半角スペースを含んだ名前なので、このままだと配列にぶちこめない。(ファイル名の前半と後半でそれぞれ格納されてしまう)
  • スクリーンショット以外のPNGファイルも移動されてしまう。
  • 移動先ディレクトリも任意の名前で作成したい。

→続き:Part.3