一撃このwebサイトの先進的な機能は、ブラウザーのJavaScriptを有効にする必要があります。2015年06月16日Tweetスクリーンショット画像などを整理する際、連番のファイル名を手動でリネームするのは骨が折れますよね?ダメ写真を削除したりして、抜け番が生じることもあるかと思います。bashのforループを使えばすんなりリネームすることができるので、是非試してみてください。ファイルの一覧を見てみましょう。ご覧のように、ファイル名はすべて接頭語が「OS_INSTALL_」で、連番は4桁の数字になっています。OS_INSTALL_0095.jpg数が多くてわかりにくいかと思いますので、抜け番があるあたりを見てみましょう。以下のように、23番目のファイルが抜けていることがわかります。渡してみるとわかります。-lOS_INSTALL_0113.jpg107ご覧のように、連番のファイルが113まであるのに対してファイルの数は107です。(あまり行儀がよろしくない)ファイル名に抜け番があるということは、先ほどの例のように、ファイル名に含まれる番号の最大値よりも実際のファイル数のほうが少ないわけです。これを自動でリネームするということは、抜け番の次にある番号がその抜け番号を埋める、つまりファイル名がデクリメントされていくというわけです。リネームの一部を見てみましょう。このコマンドを実行した時点ではまだリネームされません。渡してあげて実行しておしまいです。これでは折角元のファイルがゼロパディングでソートできているのに、台無しになってしまいます。(少しマシな実行例)桁数を揃えたままリネームするなら、以下のようにするとよいでしょう。今回の例でもコマンド実行時にはまだリネームされません。タイプすることで「やっちまった!」を防いでいます。コマンドに渡してあげましょう。その方がOPミスで間違う可能性が低いからです。OS-INSTALL_0025.jpg上記の例のように、抜け番が埋められているのがおわかりいただけるかと思います。数値型ですぜ」と宣言しています。足して、ループが続く限りカウントアップされます。続いて、ファイル名ですが、最初のアンダーバーをハイフンに置換しています。mvの前にif文でファイルの有無を見るほうが本当はよいのですが、まずはリネームできること優先でやっています。4桁の数字のファイル名を生成しています。(正解例)とりあえず先ほどの例ではリネームできましたが、ファイル名にハイフンが入ったままで気持ちが悪いです。リネームしてあげてもよいのですが、実行するコマンドは少ないに越したことがありません。今度はtestコマンドをつけて、リネーム後のファイルがなければという条件式にマッチした時だけ、抜け番を埋めるようにします。アンダーバーをハイフンにせず実行できます。いうわけでまたまたechoで確認です。OS_INSTALL_0025.jpgコマンドの構文が期待どおりなので、実行してみましょう。つけると処理の中身を見ることができます。OS_INSTALL_0107.jpgご覧のように、22番目のファイルまでは何もしていません。23番目のファイルが抜け番なので、24番目のファイルを23番にリネームしています。このように1つでも抜け番があれば、どんどんファイル名の数字を詰めていくので、以降のファイルはすべてリネームしています。2番目の抜け番もこのようによろしくやってくれています。OS_INSTALL_0029.jpgリネーム前のファイル名は、そもそも存在しないファイル名が変数に入りません。リネーム後のファイル名は、forループで前回実行した回のリネーム後のファイル名に1を足しているので、上書きの心配もありません。それではなぜtestコマンドで条件式をつけているのでしょう。その理由ですが、mvコマンドでエラーを出さないためです。testコマンドなしで実行したときはこうなります。同じファイルです(以下略)エラーで止めずにすすめたいという乱暴な考えなら一応動きますが、エラーで止める処理がある場合はこうなります。同じファイルですご覧のように、mvコマンドのエラーで処理が止まりました。testコマンドの条件式が有用だということがおわかりいただけたかと思います。shに渡すときにエラーチェックしなくてもいいじゃんと言われればそれまでですが、仮にシェルスクリプトに書く場合、後続の処理を力技ですすめるの怖くないですか?なので、ここまですれば「一応動く」ではなく、「mvコマンドが出すエラーもちゃんとケアして」リネームできたと言えることになります。