ファイル名を一括して先頭 10 文字に短くする (重複があっても大丈夫)
ファイル名を10文字にする関数(重複があっても大丈夫) - みずぴー日記にインスパイヤされて、前回のAWK Users JP :: ファイル名を一括して先頭 10 文字に短くするを改良してみました。 重複する場合には連番を付けます。
awk でファイルの有無を調べるには getline を使います。 これは既にAWK Users JP :: which コマンドの実装でも使っている技のひとつです。 ここでは while 文で重複がなくなるまでループして連番を付けていきます。
#! /usr/local/bin/nawk -f
# rename_file_2.awk
# ファイル名を一括して先頭 10 文字に短くする
# usage: nawk -f rename_file_2.awk file [...]
BEGIN {
for (i = 1; i < ARGC; i++) {
from_file = ARGV[i];
to_file = substr(from_file, 1, 10);
idx = 0;
while (getline < to_file >= 0) {
idx++;
to_file = substr(from_file, 1, 10) "_" sprintf("%02d", idx);
close(to_file);
}
close(to_file);
system("mv " from_file " " to_file);
}
}
少し意地悪な例にしてみましょう。
$ touch _1234567890 _1234567891 _1234567892 _1234567893 _123456789 _abcdefghijklm $ ls _* _1234567890 _abcdefghijklm _1234567893 _1234567892 _1234567891 _123456789 $ gawk -f rename_file_2.awk _* $ ls _* _123456789_02 _123456789_05 _123456789_03 _abcdefghi _123456789_04 _123456789_01
このように連番で変換されました。




