以下のコードはLinuxでテストされています。自分の環境で動作させるためには、何を修正する必要があるのか分かりません。さらに、私は.jpgファイルのサブディレクトリの検索を含まなかった。このようにコードを修正したい場合は、私に教えてください。
(EDIT:サブディレクトリ全体の検索のための、さらに下のプログラムのバージョンを参照してください)
use strict;
use warnings;
sub pad_left {
my $num = shift;
if ($num < 10) {
$num = "00$num";
}
elsif ($num < 100) {
$num = "0$num";
}
return $num;
}
my @files = glob "*.jpg";
my @padded_names = map {
my $name = $_;
$name =~ s/^([\w ]+\()(\d+)\)/$1 . &pad_left($2) .')'/e;
$name;
} @files;
foreach (0..$#files) {
rename($files[$_], $padded_names[$_]);
print "$files[$_] --> $padded_names[$_]\n";
}
上記のプログラムは、ファイルの名前を変更し、次のように出力されます
file(1).jpg --> file(001).jpg
file(2).jpg --> file(002).jpg
file(20).jpg --> file(020).jpg
file(200).jpg --> file(200).jpg
HTH
編集:ここでは、改善されたバージョンのabov eプログラム - これは現在、.jpgファイル用のサブディレクトリの検索も組み込んでいます。私はrename
コマンドはそれを行うことができ、私のコードは、もはや今のサブディレクトリの問題に対処する答えが与えられていることにより、として必要とされて知っていませんが、ちょっと... :)
use strict;
use warnings;
use File::Find;
sub pad_left {
my $num = shift;
if ($num < 10) {
$num = "00$num";
}
elsif ($num < 100) {
$num = "0$num";
}
return $num;
}
sub new_name {
if (/\.jpg$/) {
my $name = $File::Find::name;
my $new_name;
($new_name = $name) =~ s/^(.+\/[\w ]+\()(\d+)\)/$1 . &pad_left($2) .')'/e;
rename($name, $new_name);
print "$name --> $new_name\n";
}
}
chomp(my $localdir = `pwd`);# invoke the script in the parent-directory of the
# image-containing sub-directories
find(\&new_name, $localdir);
すごい!どうもありがとうございました。それがあなたを気にしないなら、はい、私もサブディレクトリで私を助けてください。 –
@エリック・フォルティスオクラホマ、私はそれに行くだろう:)ちょっと待ってください。 – canavanin
@エリック・フォルティス少し遊んでいて、予想以上に長い時間がかかっていました> _
canavanin