連番のファイルを一気に作成する

今回は初級エンジニアとか、ちょっと IT にかじった非エンジニア向けのお話です。

背景

私は2003年からGo to Everyone!という囲碁のプロ棋士の対局に関する情報サイトを運営しており、こちらには更新のたびに棋譜と呼ばれる囲碁の対局内容をアップロードしています。
棋譜データは、良し悪しはともかく「(期)(タイトル名の略称)(連番).sgf」のような命名をしています(35期名人戦のリーグ戦第1局なら「35meijin01.sgf」のような感じです)。
トーナメント1回戦の一斉対局などで、これらを一斉に作成する必要があるときがあります。
かつてはこれを「右クリック」→「新規作成」で1つずつ作成していたものですが、これは明らかに面倒です。
IT エンジニアになった以上こういった作業は楽をすべきで、今回はその手順をご紹介します。

前提

もちろん、シェルが使える環境であることが前提です。
Mac OS なら Terminal を開けば利用できます。
Windows の場合は Git for WindowsWindows Subsystem for Linux を使うことで同じことができます。

解決策

例えば、「10hoge1-1.sgf」から「10hoge1-16.sgf」まで作成したいとします。
そんなときは以下コマンドで一気に作成できます。

cd {ファイルを作成したいディレクトリ}
seq 16 | xargs -I{} touch 10hoge1-{}.sgf

解説

seq コマンドは指定した番号までの連番を出力してくれます(今回のように引数が1つの場合は開始値は1になるので、1から16まで出力されます)。
この出力結果を xargs コマンドで受け取ります(seq はデフォルトで改行区切りで出力され、xargs も改行単位で区切って受け取ります)。
-I オプションはそのあとに指定した文字に結果を代入するという意味で、今回だと {} に出力結果が格納されます。
touch はファイルのタイムスタンプを更新するコマンドですが、ファイルが無い場合は作成してくれますので、この仕組みを利用してファイルを作成しています。

応用

コマンドを少しいじることで、色々なパターンに対応できます。

# 開始値、終了値を決める場合 (開始値が3、終了値が10)
seq 3 10 | xargs -I{} touch 10hoge1-{}.sgf
# ゼロ埋めする場合(10が2桁なので、9以下は'09'のように2桁までゼロ埋めされます)
seq -w 10 | xargs -I{} touch 10hoge1-{}.sgf

終わりに

前述の囲碁情報サイトは2003年(当時中学3年生)から続けているんですが、就職するまで IT に関する知識がほとんどありませんでした。
なので、こういう「ちょっと工夫すれば楽ができる」ようなことが意外と役に立っているなと思い、今回アウトプットするに至りました。
今後も少しずつ書いていければ良いなと思っています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA