ファイル名を一括して先頭 10 文字に短くする
ファイル名を一括して先頭10文字に短くするバッチ - バッチもん研究所 blog からインスパイヤーされていますが、awk を使っても構わないということなので、awk でやってみます。 ただし、Windows を使っていないので、Windows のコマンドを忘れてしまっているため、ここでは Linux (Unix 系 OS) を前提に進めます。
最初に手でサンプルを作るのが結構面倒な上にディレクトリにサンプルファイルが大量にあふれる事態になりそうなので、以下のようなスクリプトを作成しました。
#! /usr/local/bin/nawk -f
# make_sample.awk
# 21 文字のランダムなファイル名を作成する
# usage: nawk -f make_sample.awk [num]
BEGIN {
num = ARGV[1] ? ARGV[1] : 10;
for (i = 1; i <= num; i++) {
file_name = ""; # 初期化
for (j = 1; j <= 20; j++) {
file_name = file_name sprintf("%c", int(rand() * 26) + 65);
}
file_name = "_" file_name; # 目印
system("touch " file_name);
}
}
このサンプルで一気に 10 個の 21 文字のファイルを作成します。 後で削除する際に目印になるようにファイル名の先頭にはアンダースコアをつけるようにしています。
実行してみます。
$ gawk -f make_sample.awk $ ls ../ _IFZESNYSCFOSCNFHQLBM _IOLWQNXVQMKAPYJGKGZM rename_file.awk _CAEKRNRHMHLYCLYWDAGW _RUWHPSDTJEQQOFYXLQYT make_sample.awk _LUWJYUVYPPIKXEVTMFDB _TBYITPOOSGMGSLQDBXWG _GHVDPFVEMDJMXGXFQOIC _LICLQQUMZYQTYNFHVAHX ./ _NOWBCQASCMGRXTSXYJXU _JKWYZDOGULTFMYWYKIFI
さて、先頭にアンダースコアのあるファイルを 10 文字にします。
#! /usr/local/bin/nawk -f
# rename_file.awk
# ファイル名を一括して先頭10文字に短くする
# usage: nawk -f rename_file.awk file [...]
BEGIN {
for (i = 1; i < ARGC; i++) {
system("mv " ARGV[i] " " substr(ARGV[i], 1, 10));
}
}
これを実行すればいいわけです。
$ gawk -f rename_file.awk _* $ ls ../ _GHVDPFVEM _CAEKRNRHM _JKWYZDOGU _TBYITPOOS rename_file.awk _NOWBCQASC _LUWJYUVYP _IOLWQNXVQ ./ make_sample.awk _IFZESNYSC _LICLQQUMZ _RUWHPSDTJ
10 文字に変更されました。
awk だと他のコマンドに頼らなければならないのですが、実際のコアの部分は非常に小さなプログラムで記述することができます。




