Perl 小品集 ─ renames
#!/usr/bin/perl
# renames.pl
#
# 画像ファイルに連番をつけて名前を変更する
# 開始番号の取得
if($ARGV[1] eq ""){
$number = 1;
}
else{
$number = $ARGV[1];
}
# 画像ファイル名の取得
$newname = $ARGV[0];
if ($newname eq ""){
print "Input new file name [and start number].\n";
print "You can rename back by running <backnames>.\n";
exit (0);
}
# ファイル一覧の取得
# オリジナルのファイル名を @files に格納
@files1 = glob ("*.gif");
@files2 = glob ("*.jpg");
@files3 = glob ("*.png");
@files = (@files1, @files2, @files3);
# 新しいファイル名を @newname に格納
$sum = 0;
for $oldname (@files){
@body = split /\./, $oldname;
if($number < 10){
$p_number = "00$number";
}
elsif($number < 100){
$p_number = "0$number";
}
else{
$p_number = $number;
}
$newfiles[$sum] = "$newname$p_number.$body[1]";
$sum++;
$number++;
}
# オリジナルのファイル名と新しいファイル名の比較
# 同じものがあれば作業をしない
for $oldname (@files){
for $newname (@newfiles){
if($oldname eq $newname){
print "Found the same file name!\n";
exit(0);
}
}
}
# バックアップを backnames に保存する
open OUT, ">backnames";
print OUT "#!/bin/bash\n";
# ファイル名の変換
$count=0;
for $oldname (@files){
system ("mv $oldname $newfiles[$count]");
print OUT "mv $newfiles[$count] $oldname\n";
$count++;
}
close (OUT);
# バックアップファイルに実行属性をつけて逆変換を可能にする
system ("chmod +x backnames");